সি # সিনট্যাক্স - কমা দ্বারা অ্যারেগুলিতে স্ট্রিং বিভক্ত করুন, জেনেরিক তালিকায় রূপান্তর করুন এবং বিপরীত অর্ডার করুন


92

এর জন্য সঠিক বাক্য গঠন কী:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

আমি কি গণ্ডগোল করছি? টিসোর্স বলতে কী বোঝায়?

উত্তর:


254

সমস্যাটি হচ্ছে আপনি কল করছেন List<T>.Reverse()যা ফিরে আসে void

আপনি হয় করতে পারেন:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();

বা:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();

পরেরটি আরও ব্যয়বহুল, যেহেতু একটি স্বেচ্ছাচারিতাকে বিপরীত IEnumerable<T>করাতে সমস্ত ডেটা বাফার করা এবং তারপরে এটি সমস্ত উত্পন্ন করা হয় - যেখানে List<T>"বিপরীতে" সমস্ত বিপরীত কাজ করা যায়। (এখানে পার্থক্যটি হ'ল Enumerable.Reverse<T>()এটি List<T>.Reverse()উদাহরণ পদ্ধতির পরিবর্তে এক্সটেনশন পদ্ধতিটি কল করছে ))

আরও কার্যকর, আপনি ব্যবহার করতে পারেন:

string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();

এটি একটি অনুপযুক্ত আকারের কোনও বাফার তৈরি করা এড়াতে পারে - যেখানে চারটি স্টেটমেন্ট নেওয়ার ব্যয় হয় যেখানে কেউ করবে ... যথারীতি, আসল ব্যবহারের ক্ষেত্রে পারফরম্যান্সের বিরুদ্ধে পঠনযোগ্যতার বিষয়টি বিবেচনা করুন।


25
কঙ্কাল একটি জন্তু!
মাংস

4
ভাল ব্যাখ্যা, আমি সত্যিই প্রশংসা!
গৌরব অরোরা

11

আমি বুঝতে পারি যে এই প্রশ্নটি বেশ পুরানো, তবে আমার স্ট্রিংয়ের মধ্যে ফাঁকা স্থানগুলি বাদ দেওয়া ছাড়া আমার একটি একই সমস্যা ছিল। তাদের জন্য কীভাবে কেবল কমা ছাড়াও কোনও স্ট্রিং আলাদা করতে হয় তা জানতে হবে:

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

স্ট্রিংস্প্লিটঅ্যাপশনগুলি রেকর্ডগুলি সরিয়ে দেয় যা কেবল একটি স্পেস চর হবে ...


আপনার যদি "টম ক্রুজ" পরিবর্তে কেবল টম থাকে তবে এটি কাজ করবে না
জ্বালিয়ে দিন



1

এখানে আপনার কী অনুপস্থিত তা হ'ল বিপরীত () একটি শূন্য পদ্ধতি। কোনও পরিবর্তনকের বিপরীত () এর ফলাফল নির্ধারণ করা সম্ভব নয়। তবে আপনি এনিউমারেবল ব্যবহার করার ক্রম পরিবর্তন করতে পারেন e বিপরীত () এবং আপনার ফলাফল পান

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

পার্থক্যটি হ'ল এনিউমারেবল R বিপরীত () অকার্যকর রিটার্ন হওয়ার পরিবর্তে একটি আইয়ুনিউরেবল <T> প্রদান করে


1

আপনি যদি চেষ্টা করছেন

  1. একাধিক ডিলিমিটার ব্যবহার করুন
  2. যে কোনও খালি স্ট্রিং ফিল্টার করুন
  3. শীর্ষস্থানীয় / পিছনে স্থান ছাঁটাই

নিম্নলিখিত কাজ করা উচিত:

string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
                            .Split(new char[]{',', '|'})
                            .Where(x=>x!=null && x.Trim().Length > 0)
                            .Select(x=>x.Trim());

আউটপুট

  • টম
  • ক্রুজ
  • স্কট
  • বব
  • at

অন্যদের পরামর্শ অনুসারে এখন আপনি স্পষ্টতই আদেশটিকে বিপরীত করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.