2011-07-18 18 views
11

की संपूर्ण सामग्री मेरे पास HashSet<string> है जो आवधिक रूप से जोड़ा जाता है। मैं क्या करना चाहता हूं कि पूरे हैशसेट को फोरच लूप किए बिना स्ट्रिंग में डालना है। क्या किसी के पास कोई उदाहरण है?सी # हैशसेट <string>

+1

एक एकल स्ट्रिंग के दो तत्वों के बीच एक सफेद स्पेस डाल देता? मूल्यों को संयोजित करने के रूप में? – Brian

+7

मैं कुछ के बारे में उत्सुक हूँ। मैंने फॉर्म के * दर्जन * प्रश्नों को देखा है "मैं ऐसा कुछ करना चाहता हूं जो स्पष्ट रूप से एक लूप की आवश्यकता है, और मैं एक लूप का उपयोग नहीं करना चाहता हूं"। ** क्यों? ** इस घृणित लोगों के पास लूप के लिए कहां है? –

+6

मुझे लगता है कि लोग अपने कोड की अर्थपूर्ण स्पष्टता में सुधार करना चाहते हैं। यदि आपके पास 'स्ट्रिंगबिल्डर एसबी = नया स्ट्रिंगबिल्डर() के बजाय' mySet.ItemsAsOneBigString() 'था; foreach (Myset में स्ट्रिंग एस) sb.append (ओं); वापस sb.ToString(); 'हाँ, यह छोटा है, लेकिन फिर सी # सिंटैक्टिक और फ्रेमवर्क चीनी "cubes" के कई अन्य हैं;) जो कोड को पढ़ने और निर्धारित करने के लिए स्पष्ट बनाता है। – jasonh

उत्तर

32

आप सामग्री पर लूप करेंगे, चाहे आप स्पष्ट रूप से एक लिखें या नहीं।

हालांकि, स्पष्ट लेखन के बिना यह करने के लिए, और से अगर "डाली" क्या आपका मतलब "जोड़", तो आप इस

string output = string.Join("", yourSet); // .NET 4.0 
string output = string.Join("", yourSet.ToArray()); // .NET 3.5 
+8

+1, लेकिन यह भी ध्यान देने योग्य है कि .NET 3.5 संस्करण स्पष्ट लूप की तुलना में "बदतर" है: इसे डेटा के माध्यम से दो पास की आवश्यकता होती है (एक 'ToArray' कॉल के लिए और एक' जॉइन 'कॉल के लिए) और एक अतिरिक्त आवंटन ('ToArray' द्वारा उत्पन्न सरणी)। – LukeH

+0

मुझे @ ब्रायन का जवाब पसंद है - यह आपको मानों के बीच लूप को क्या रखना चाहिए पर नियंत्रण देता है: string.Join (",", set)। ऊपर 4.0 वाक्यविन्यास पसंद करने के प्रदर्शन कारण होंगे? –

3

की तरह कुछ लिखते थे आप एक ही तार का एक संयोजन है कि चाहते हैं HashSet में मूल्यों, इस काम करना चाहिए ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     var set = new HashSet<string>(); 
     set.Add("one"); 
     set.Add("two"); 
     set.Add("three"); 
     var count = string.Join(", ", set); 
     Console.WriteLine(count); 
     Console.ReadKey(); 
    } 
} 
2

आप एक ही विधि सभी HashSet के आइटम concatenated प्राप्त करना चाहते हैं, तो आप एक विस्तार विधि बना सकते हैं।

[] के

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     HashSet<string> hashset = new HashSet<string>(); 
     hashset.Add("AAA"); 
     hashset.Add("BBB"); 
     hashset.Add("CCC"); 
     Assert.AreEqual<string>("AAABBBCCC", hashset.AllToString()); 
    } 
} 

public static class HashSetExtensions 
{ 
    public static string AllToString(this HashSet<string> hashset) 
    {   
     lock (hashset) 
     { 
      StringBuilder sb = new StringBuilder(); 
      foreach (var item in hashset) 
       sb.Append(item); 
      return sb.ToString(); 
     } 
    } 
} 
1

आप Linq का उपयोग कर सकते हैं:

hashSet.Aggregate((a,b)=>a+" "+b) 

जो आपके HashSet

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