सी # सिंटैक्स - कोमा द्वारा ऐरे में विभाजित स्ट्रींग, जेनेरिक सूची में कन्वर्ट, और रिवर्स ऑर्डर


92

इसके लिए सही सिंटैक्स क्या है:

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

मैं क्या गड़बड़ कर रहा हूं? TSource का क्या अर्थ है?

जवाबों:


251

समस्या यह है कि आप कॉल कर रहे हैं 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
एक जानवर का कंकाल!
मांस

2
अच्छी तरह से विस्तृत, मैं वास्तव में सराहना की!
गौरव अरोरा

11

मुझे पता है कि यह प्रश्न काफी पुराना है, लेकिन मुझे एक समान समस्या थी, सिवाय इसके कि मेरे स्ट्रिंग में रिक्त स्थान शामिल थे। उन लोगों के लिए जो जानना चाहते हैं कि एक स्ट्रिंग को केवल अल्पविराम से अधिक कैसे अलग करें:

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

StringSplitOptions उन रिकॉर्ड्स को हटा देता है जो केवल एक स्पेस चार होगा ...


यह नहीं होगा काम करता है, तो आप "टॉम क्रूज" के बजाय सिर्फ टॉम था
आग लगा दी


1

इसे इस्तेमाल करे:

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

मैं त्रुटि मिलती है - परोक्ष 'System.Collections.Generic.List <string> के प्रकार' शून्य 'कनवर्ट नहीं कर सकता
BuddyJoe

1

आपका यहाँ क्या गायब है। यह () एक शून्य विधि है। एक चर के लिए .Rerseerse () के परिणाम को निर्दिष्ट करना संभव नहीं है। हालाँकि आप Enumerable.Reverse () का उपयोग करने और अपना परिणाम प्राप्त करने के लिए ऑर्डर बदल सकते हैं

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

अंतर यह है कि Enumerable.Reverse () शून्य रिटर्न होने के बजाय एक IEnumerable <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());

उत्पादन

  • टॉम
  • क्रूज
  • स्कॉट
  • बॉब
  • पर

अब आप स्पष्ट रूप से आदेश को उलट सकते हैं जैसा कि दूसरों ने सुझाव दिया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.