क्या C # में एक HashSet के लिए एक AddRange बराबर है


305

एक सूची के साथ आप कर सकते हैं:

list.AddRange(otherCollection);

HashSet में कोई ऐड रेंज विधि नहीं है । HashSet में एक और संग्रह जोड़ने का सबसे अच्छा तरीका क्या है?

जवाबों:


545

के लिए HashSet<T>, नाम है UnionWith

यह कार्य करने के विशिष्ट तरीके को इंगित HashSetकरता है। आप इसे सुरक्षित रूप Addसे यादृच्छिक तत्वों का एक सेट नहीं कर सकते Collections, जैसे कुछ तत्व स्वाभाविक रूप से वाष्पित हो सकते हैं।

मुझे लगता है कि UnionWith"दूसरे के साथ विलय" के बाद इसका नाम लिया गया है HashSet, हालांकि, इसके लिए एक अधिभार IEnumerable<T>भी है।


9
इम्हो, HashSet(और ISet) गणितीय रूप से निर्धारित अवधि के साथ बनाया गया था। UnionWithनिकट अवधि थी। को छोड़कर Except, जिसे स्पष्ट रूप से नाम दिया जाना चाहिए Subtract, गणितीय रूप से बोलना चाहिए।
पिता वाइल्डचाइल्ड

5

ये एक तरीका है:

public static class Extensions
{
    public static bool AddRange<T>(this HashSet<T> source, IEnumerable<T> items)
    {
        bool allAdded = true;
        foreach (T item in items)
        {
            allAdded &= source.Add(item);
        }
        return allAdded;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.