2010-05-26 9 views
31

यह शायद कुछ मूर्खतापूर्ण मैं याद किया है, लेकिन मैं पूर्णांकों की एक सूची को श्रेणीबद्ध करने के लिए उन लोगों के साथ संक्षेप के बजाय का प्रयास करें:LINQ: मैं कॉमा सीमांकित स्ट्रिंग में पूर्णांक की एक सूची को कैसे जोड़ूं?

integerArray.Aggregate((accumulator, piece) => accumulator+"," + piece) 

संकलक तर्क त्रुटि के बारे में शिकायत की। क्या लूप से गुज़रने के बिना ऐसा करने का कोई आसान तरीका है?

उत्तर

54

.NET का कौन सा संस्करण? 4.0 में आप string.Join(",",integerArray) का उपयोग कर सकते हैं। 3.5 में मैं केवल string.Join(",",Array.ConvertAll(integerArray,i=>i.ToString())); का उपयोग करने का लुत्फ उठाऊंगा (माना जाता है कि यह एक सरणी है)। अन्यथा, इसे एक सरणी बनाएं, या StringBuilder का उपयोग करें।

+0

क्या इस मामले में स्ट्रिंगबिल्डर का उपयोग करने के लिए हमेशा यह सर्वोत्तम नहीं होगा? –

+4

विचित्र रूप से पर्याप्त, जुड़ना अधिक प्रदर्शनकारी है जो स्ट्रिंगबिल्डर है। मैंने एक परीक्षण किया, और आकार में 1,000,000 सरणी के साथ, 207ms लिया, जबकि स्ट्रिंगबिल्डर ने 264ms लिया। मुझे संदेह है कि यह इसलिए है क्योंकि जॉइन को कार्य के लिए अनुकूलित किया गया है, जबकि एसबी को सामान्य मामले के लिए अनुकूलित किया गया है। – Cyberherbalist

+0

अगर मेरे पास 'ऐरे' प्रकार शुरू नहीं हुआ है, तो क्या 'ऐरे। कन्वर्टएल (list.ToArray(), ...)' बनाम 'inumerable.Select (...) के बीच एक गति अंतर है। ToArray() '? – Michael

14

आपको जो त्रुटि मिल रही है वह है क्योंकि आपने Aggregate के ओवरराइड का उपयोग नहीं किया है जो आपको बीज निर्दिष्ट करने देता है। यदि आप बीज निर्दिष्ट नहीं करते हैं, तो यह संग्रह के प्रकार का उपयोग करता है।

integerArray.Aggregate("", (accumulator, piece) => accumulator + "," + piece); 
+1

+1 क्योंकि आपने प्रश्न का उत्तर दिया था। हालांकि, आपके कोड में ओ (एन^2) प्रदर्शन है। अछा नहीं लगता। –

+0

अब शामिल तारों की संख्या गिनती है ... –

+1

@ केनेटबेलेंकी, 'कुल' कुछ भी नहीं है जो एक चरम लूप है जो एक चर के मान को सेट करता है। - वह ओ (एन) ओ नहीं है (एन^2)? – ebb

2

बस @ करने के लिए एक और विकल्प जोड़ने के लिए मार्क के

var list = string.Join(",", integerArray.Select(i => i.ToString()).ToArray()); 
11

आप शायद String.Join उपयोग करना चाहते हैं।

string.Join(",", integerArray.Select(i => i.ToString()).ToArray()); 

आप नेट 4.0 का उपयोग कर रहे हैं, तो आप एक सरणी reifying की परेशानी के माध्यम से जाने की जरूरत नहीं है। और बस

string.Join(",", integerArray); 
+0

Slick! वास्तव में सहायक – Cyberherbalist

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