2008-11-24 8 views
78
रिवर्स

इस के लिए सही सिंटैक्स क्या है:सी # सिंटेक्स - कॉमा द्वारा सरणी में विभाजित करें स्ट्रिंग, सामान्य सूची में बदलें, और आदेश

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

क्या मैं खिलवाड़ कर रहा हूँ? टीएसओएस का क्या अर्थ है?

उत्तर

203

समस्या यह है कि आप 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(); 

यह एक अनुचित आकार के किसी भी प्रतिरोधक बनाने से बचा जाता है - चार बयान लेने की लागत पर जहां कोई करेगा ... हमेशा के रूप में, असली उपयोग मामले में प्रदर्शन के खिलाफ पठनीयता का वजन।

+21

स्कीट एक जानवर है! – flesh

+2

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

1

इस प्रयास करें:

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

मुझे त्रुटि मिलती है - निश्चित रूप से 'void' को 'System.Collections.Generic.List BuddyJoe

+1

में परिवर्तित नहीं किया जा सकता है मैंने अभी कोशिश की है और यह पूरी तरह से – Yona

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

यह एक काम करता है।

1

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

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

अंतर यह है कि Enumerable.Reverse() देता है एक IEnumerable < टी > के बजाय जा रहा है शून्य वापसी

7

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

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

StringSplitOptions रिकॉर्ड है कि केवल एक अंतरिक्ष चार होगा निकाल देता है ...

+0

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

+0

https://stackoverflow.com/a/45799171/799593 – ablaze

0

आप

  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()); 

आउटपुट

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

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

संबंधित मुद्दे