मैं एक ArrayList से कॉमा सीमांकित स्ट्रिंग कैसे बनाऊं?


84

मैं एक प्रोसेसिंग स्क्रिप्ट में Ids के ArrayList को स्टोर कर रहा हूं जिसे मैं डिबग लॉग में आउटपुट के लिए अल्पविराम सीमांकित सूची के रूप में बाहर थूकना चाहता हूं। क्या कोई ऐसा तरीका है जिसे मैं चीजों के माध्यम से आसानी से पा सकता हूं?

संपादित करें: जो .net 2.0 और इसके बाद के संस्करण में उपलब्ध सूची (टी) को इंगित करने के लिए जोएल के लिए धन्यवाद। यदि आपके पास यह उपलब्ध है तो चीजें आसान हो जाती हैं।


मुझे लगता है, क्योंकि आप एक ArrayList का उपयोग कर रहे हैं, आप .Net 1.0 या .Net 1.1 का उपयोग कर रहे हैं?
k --e'mͮpͥ ͩ

जवाबों:


160

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

... VB.NET में:

String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))

... सी # में

string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))

इनमें से केवल "गोचा" यह है कि ArrayList में स्ट्रिंग्स के रूप में संग्रहीत आइटम होने चाहिए यदि आप विकल्प स्ट्रिक्ट का उपयोग कर रहे हैं तो सुनिश्चित करें कि रूपांतरण ठीक से हो।

संपादित करें: यदि आप .net 2.0 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो बस एक सूची बनाएं (स्ट्रिंग का) प्रकार का ऑब्जेक्ट और आप वह प्राप्त कर सकते हैं जिसकी आपको आवश्यकता है। इसे लाने के लिए जोएल को बहुत धन्यवाद!

String.Join(",", TargetList.ToArray())

2
अन्य "गोच" हैं। एक यह है कि यह समाधान स्वयं सूची के माध्यम से लूपिंग के रूप में मुहावरेदार नहीं है। दूसरा, अगर ToArray कलेक्शन को ट्रेस करता है, और Join भी करता है, तो यह एक साधारण फोरचार्ज लूप से दोगुना होता है।
छिपकली का बिल

बेशक वहाँ हमेशा System.Collections.Specialized.StringCollection का उपयोग करने की संभावना है।
आईसीआर

यदि आप इसके बजाय एक सूची <string> का उपयोग करने पर विचार कर सकते हैं, जिसमें एक अंतर्निहित ToArray () विधि है, और एलिमिनिअन प्रकार के मुद्दे हैं। BTW - टाइपोफ (स्ट्रिंग) टाइप.गेट टाइप ("System.String") के लिए बेहतर है।
जॉन बी

17

अब तक के समाधान सभी काफी जटिल हैं। मुहावरेदार समाधान निस्संदेह होना चाहिए:

String.Join(",", x.Cast(Of String)().ToArray())

नए फ्रेमवर्क संस्करणों में फैंसी कलाबाजी की कोई आवश्यकता नहीं है। एक नहीं-आधुनिक संस्करण का समर्थन करना, निम्नलिखित आसान होगा:

Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))

mspmsp का दूसरा समाधान एक अच्छा तरीका है, लेकिन यह काम नहीं कर रहा है क्योंकि यह AddressOfकीवर्ड को याद करता है । इसके अलावा, Convert.ToStringबल्कि अक्षम है (अनावश्यक आंतरिक मूल्यांकन के बहुत सारे) और Convertवर्ग आमतौर पर बहुत सफाई से डिजाइन नहीं किया गया है। मैं इससे बचना चाहता हूं, खासकर जब से यह पूरी तरह से बेमानी है।


CType और CStr अनिवार्य रूप से कन्वर्ट क्लास में कॉल नहीं हैं?
जोएल कोएहॉर्न

@ इकोस्टॉर्म: मैं ऐसा कहां कहूं? @ जोल: बिलकुल नहीं। ज्यादातर समय, वे MS.VB.CS.Conversions.ToStringसहायक फ़ंक्शन को कॉल करते हैं जिसके परिणामस्वरूप एक सरल ToStringकॉल होता है। लेकिन यहां तक ​​कि इस पद्धति को मैं प्रत्यक्ष वाई नहीं कहूंगा (जैसा कि वीबी के कलाकारों के माध्यम से विरोध किया गया है)।
कोनराड रुडोल्फ

16

कुछ इस तरह:

String.Join(",", myArrayList.toArray(string.GetType()) );

जो मूल रूप से लूप्स जानते हैं ...

संपादित करें

कैसा रहेगा:

string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));

उफ़ .... यह सही नहीं है ... कैसे के बारे में: string.Join (",", Array.ConvertAll <object, string> (a.ToArray (), Convert.ToString));
mspmsp

8

string.Join(" ,", myArrayList.ToArray()); यह .net फ्रेमवर्क 4.5 के साथ काम करेगा


2

स्ट्रिंग्स की सूची से String.Join () का उपयोग करते हुए कॉमा सीमांकित स्ट्रिंग के निर्माण का प्रदर्शन करने वाला एक सरल उदाहरण यहां दिया गया है:

List<string> histList = new List<string>();
histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff"));
histList.Add(Index.ToString());
/*arValue is array of Singles */
foreach (Single s in arValue)
{
     histList.Add(s.ToString());
}
String HistLine = String.Join(",", histList.ToArray());

2
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()

या

string.Concat(foo.ToArray().Select(a => a += ",").ToArray())

अद्यतन करना, क्योंकि यह बहुत पुराना है। आपको निश्चित रूप से, स्ट्रिंग का उपयोग करना चाहिए। अभी नहीं। यह लेखन के समय एक विकल्प के रूप में मौजूद नहीं था।


वाह, मैं सच में माफी चाहता हूँ! मैंने इस सवाल पर "C #" टैग को पूरी तरह से नजरअंदाज कर दिया और आपके जवाबों को मान्य VB कोड माना गया। मुझ पर शर्म की बात है। लेकिन जब हम नाइटपैकिंग कर रहे हों: आपका दूसरा जवाब अंत में एक अतिरिक्त "," जोड़ता है।
कोनराड रुडोल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.