सी # सूची <string> सीमांकक के साथ स्ट्रिंग करने के लिए


631

क्या सी # में एक फ़ंक्शन है जो कुछ संग्रह को जल्दी से स्ट्रिंग में परिवर्तित कर सकता है और सीमांकक के साथ मूल्यों को अलग कर सकता है?

उदाहरण के लिए:

List<string> names -> string names_together = "John, Anna, Monica"

जवाबों:


1201

आप उपयोग कर सकते हैं String.Join। यदि आपके पास एक है List<string>तो आप ToArrayपहले कॉल कर सकते हैं :

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

.NET 4 में आपको ToArrayअब और ज़रूरत नहीं है, क्योंकि वहाँ एक अधिभार है String.Joinकि एक लेता है IEnumerable<string>

परिणाम:


जॉन, अन्ना, मोनिका


95

यदि आप चाहें तो आप इसे linq के साथ भी कर सकते हैं

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

यद्यपि मैं क्वार्टरमाइस्टर के उत्तर में गैर-लाइनिक सिंटैक्स पसंद करता हूं और मुझे लगता है कि Aggregateयह धीमी गति से प्रदर्शन कर सकता है (शायद अधिक स्ट्रिंग संघनन संचालन)।


19
तेजी से जवाब के लिए धन्यवाद, दोनों ठीक काम करता है। आपने सही कहा कि मैंने स्टॉपवॉच क्लास का उपयोग करते हुए एक छोटा प्रदर्शन मापक किया है और लाइनक-वे बहुत धीमा है: स्ट्रिंग.जॉइन (",", नाम.टायर ()); -> 18 टिकियों को लिया (कुल मिलाकर (a, b) => a + "," + b) -> 736 टिक लिया
nan

2
हाँ, मुझे लगता Aggregateहै कि मैथ प्रकार के संचालन के लिए बेहतर है। इस ऑपरेशन के तार के साथ यह for eachआईएनजी के समान है और सिर्फ एक स्ट्रिंग के लिए संलग्न है जो अक्षम में बहुत धीमा है क्योंकि आप सूची में मौजूद प्रत्येक आइटम के लिए एक नया स्ट्रिंग बना रहे हैं।
बॉब

ध्यान दें कि बीज के बिना एग्रीगेट एक InvalidOperationException को फेंक देगा यदि कंटेनर खाली है। त्रुटि हैंडलिंग कोड या सशर्त जांच से बचने के लिए वरीयता प्राप्त संस्करण (बीज, फंक) का उपयोग करें। String.Join खाली नहीं फेंकता है इसलिए कोई बीज या अतिरिक्त कोड की आवश्यकता नहीं है ... इसके अलावा इसे Linq की आवश्यकता नहीं है और वाक्यविन्यास थोड़ा स्पष्ट है।
Huacanacha

1
यदि आप StringBuilder का उपयोग करेंगे, तो ऊपर दिए गए उदाहरण में एकत्र होना तेजी से काम कर सकता है। एकाधिक संयोजन करने के लिए '+' का उपयोग करने की अनुशंसा नहीं की जाती है। यहाँ पर टिप्पणी अनुभाग देखें ( msdn.microsoft.com/en-us/library/… )
इल्या
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.