स्ट्रिंग को एक पंक्ति में सूची <string> में बदलें?


101

मेरे पास एक स्ट्रिंग है:

var names = "Brian,Joe,Chris";

क्या इसे एक पंक्ति में एक List<string>सीमांकित में परिवर्तित करने का एक तरीका है ,?


15
मैं "एक पंक्ति में" आवश्यकता को नहीं समझता। लेखन कोड के लिए गोली मारो जो स्पष्ट और समझने योग्य है, न कि किसी ऑपरेशन को यथासंभव छोटे स्थान में फिट करने के तरीके।
एड एस।

6
LINQ के आगमन के साथ, "वन लाइनर्स" जो पठनीय और स्वच्छ हैं, C # IMO में अधिक सामान्य हो गए हैं।
मैट ग्रीर

5
@ ईडी एस - जबकि मैं मानता हूं कि "एक पंक्ति में" इसे लगाने का सबसे अच्छा तरीका नहीं हो सकता है, सिंगल लाइन स्टेटमेंट जैसे कि एक मैट ग्रीर बहुत स्पष्ट और समझ में आता है। मेरा अनुमान है कि वह केवल एक forलूप का उपयोग करने से बचना चाहता है , जो अधिक थकाऊ, त्रुटि प्रवण और अस्पष्ट है।
स्ट्रिपिंगवर्यर

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

जवाबों:


197
List<string> result = names.Split(new char[] { ',' }).ToList();

या दान के सुझाव से भी क्लीनर:

List<string> result = names.Split(',').ToList();

11
आपने इसे उद्देश्य के लिए रखा होगा, लेकिन मैं हमेशा पूरे new char[] { }हिस्से को छोड़ देता हूं । यह उस तरह से अधिक पठनीय है, कम से कम मेरे लिए ।
दान ताओ

4
@Dan: मैं सहमत हूं, और आम तौर पर मैं params अधिभार का उपयोग करते हैं। लेकिन कभी-कभी एक प्रश्न के उत्तर के लिए मुझे लगता है कि क्रियाशीलता बेहतर है। बस राय की बात है।
मैट ग्रीर

2
ToList () अब उपलब्ध नहीं लगता है?
जीना मारनो

10
क्या आप System.LINQनामस्थान में लाए थे ?
मैट ग्रीर


3

मैं इसे पसंद करता हूं क्योंकि यह एक आइटम को खाली आइटम के साथ रोकता है यदि आपका स्रोत स्ट्रिंग खाली है:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();

1

पात्रों द्वारा सीमांकित एक स्ट्रिंग को विभाजित करें और सभी गैर-खाली तत्वों को वापस करें।

var names = ",Brian,Joe,Chris,,,";
var charSeparator = ",";
var result = names.Split(charSeparator, StringSplitOptions.RemoveEmptyEntries);

https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8



0

यदि आपके पास पहले से सूची है और एक सीमांकित स्ट्रिंग से मान जोड़ना चाहते हैं, तो आप उपयोग कर सकते हैं AddRangeया कर सकते हैं InsertRange। उदाहरण के लिए:

existingList.AddRange(names.Split(','));

0

स्ट्रिंग पैकेज का उपयोग करें

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.