2010-12-02 17 views
9

में कॉमा सीमांकित स्ट्रिंग के लिए यह अक्सर आता है। मेरे पास एक सूची है और मैं सूची में सभी तत्वों की कॉमा सीमांकित स्ट्रिंग पर जाना चाहता हूं जिसे मैं SQL में उपयोग कर सकता हूं।सूची <long> सी #

सी # में ऐसा करने का सबसे शानदार तरीका क्या है? उन सभी पर इटरेट करना ठीक है, सिवाय इसके कि पहले या आखिरी तत्व को विशेष-आधारित होना चाहिए क्योंकि मैं अग्रणी या पिछला कॉमा नहीं चाहता हूं।

एक अच्छा एक-लाइनर मिला?

उत्तर

22

string.Join अपने दोस्त है ...

var list = new List<long> {1, 2, 3, 4}; 
var commaSeparated = string.Join(",", list); 
+0

मुझे विश्वास है कि एक वाक्यविन्यास त्रुटि देता है - String.Join एक दूसरे तर्क के रूप में एक सूची नहीं लेगा। –

+0

@ जॉन शेडलेटस्की: .NET Framework 4.0 ने प्रस्तुत किया [स्ट्रिंग.जॉइन विधि (स्ट्रिंग, आईनेमेरेबल )] (http://msdn.microsoft.com/en-us/library/dd992421.aspx) – dtb

+0

@ डीटीबी: लगता है .NET 4 – Vlad

12
List<long> items = // init here 
string result = string.Join(", ", items.Select(i => i.ToString()).ToArray()); 

सुनिश्चित नहीं है कि यह सबसे शानदार तरीका है, लेकिन यह 1 लाइनर है!

अब वहाँ भी एक string.Join कि एक IEnumerable<T> स्वीकार करता है, तो यह भी कम हो जाता है: निष्कर्ष टाइप करने के लिए

string result = string.Join(", ", items); 

धन्यवाद, आप निर्दिष्ट Join<long>

0

की जरूरत नहीं है मेरा मानना ​​है कि String.Join करता है ।

3
string.Join(",", Array.ConvertAll(list.ToArray(), item => item.ToString())); 

(पोस्ट में प्रत्यक्ष रूप से लिखा है, इसलिए मैं पैरामीटर गलत की एक जोड़ी मिल गया है सकते हैं, लेकिन आप अंदाजा हो)

+1

यह पहली से एक नई सरणी आवंटित 'Toorray() 'की वजह से' सूची <>', फिर 'Array.ConvertAll' की वजह से एक और सरणी आवंटित करता है। चूंकि .NET संस्करण 4.0 (विजुअल स्टूडियो 2010) एक अधिभार है जो सीधे काम करता है, 'string.Join (",", list) '। –

1
public static string CommaSeparate(this IEnumerable<string> values) 
    { 
     if (values.Count() == 0) return "[none]"; 
     return string.Join(", ", values.ToArray()); 
    } 

यह एक विस्तार विधि है जिसका उपयोग मैं अपने अनुप्रयोगों में करने के लिए करता हूं। यह IENumerable पर आधारित है लेकिन सूची के लिए समान होना चाहिए।

2

तुम दोनों पहली और आखिरी मूल्य के लिए विशेष मामलों है आप इसे मैन्युअल रूप से करना है तो करना चाहिए नहीं है, इसके बजाय आप बस ऐसा कर सकता है:

List<long> junk = // have some values here; 
string separator = string.Empty; 
string list = string.Empty; 

foreach(long john in junk) 
{ 
    list += separator + john.ToString(); 
    separator = ", "; 
} 

कह नहीं आप ऐसा करते हैं चाहिए, इस बस के रूप में संबंध एक टिप्पणी।

2
// Content IDs 
List<long> cIds = new List<long>(); 
cIds.Add(1); 
cIds.Add(2); 
cIds.Add(1); 
cIds.Add(3); 
cIds.Add(3); 
string ids = string.Join(",", cIds.Distinct().Select(x => x.ToString()).ToArray()); 
// The example return the following output: 
// ids = "1,2,3" 

अनन्य आइटमों की सूची को सीमित किया गया है।

0
List<long> list =new List<long>(){1,2,3,4,5,6,7}; 

StringBuilder str =new StringBuilder();  

foreach(var i in list) 
{ 
str.Append(i).Append(','); 
} 

इस रूप में

उत्तर में (StringBuilder) str लंबे मान संलग्न होगा: str = 1,2,3,4,5,6,7

+0

इस सवाल का जवाब पहले से ही स्वीकार किया गया है जैसा कि कुछ समय पहले स्वीकार किया गया था। यदि आप वास्तव में कुछ उपयोगी/उपयोगी जोड़ते हैं तो केवल एक प्रश्न को पुनर्जीवित करना सबसे अच्छा है। –

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