2010-08-26 15 views
325

के साथ स्ट्रिंग करने के लिए सी # में कोई फ़ंक्शन है जो कुछ संग्रह को स्ट्रिंग और डेलीमीटर के साथ अलग-अलग मानों में परिवर्तित करने के लिए कोई फ़ंक्शन है?सी # सूची <string> delimiter

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

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

उत्तर

617

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

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

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

44

तुम भी LINQ साथ ऐसा कर सकते, यदि आप चाहें

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

हालांकि मैं Quartermeister के जवाब में गैर LINQ वाक्य रचना पसंद करते हैं और मुझे लगता है कि Aggregate धीमी (शायद अधिक स्ट्रिंग संयोजन संचालन) प्रदर्शन कर सकते हैं।

+6

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

+1

लिया गया मुझे लगता है कि गणित प्रकार के संचालन के लिए 'कुल' बेहतर है। इस ऑपरेशन को तारों के साथ यह प्रत्येक 'आईएनजी' के समान है और केवल एक स्ट्रिंग में संलग्न है जो अक्षम में बहुत धीमी है क्योंकि आप सूची में मौजूद प्रत्येक आइटम के लिए एक नई स्ट्रिंग बना रहे हैं। – Bob

+0

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

-2
List<string> targets = new List<string>(); 

var InboxChecked = true; 
var BannerChecked = false; 
var EmailChecked = true; 

if (InboxChecked) 
{ 
    targets.Add("Inbox"); 
} 

if (BannerChecked) 
{ 
    targets.Add("Banner"); 
} 

if (EmailChecked) 
{ 
    targets.Add("Email"); 
} 

var index = 0; 

if (targets.Any()) 
{ 
    var aggregate = targets.Aggregate((s1, s2) => 
    { 
     return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2; 
    }); 

    // aggregate.Dump(); 
} 

// returns -> Inbox and Email 
+8

यह यहाँ क्यों है? ओपी के साथ इसका कोई संबंध नहीं है ...? – Assimilater

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