C # HashSet için bir AddRange eşdeğeri var mı


306

Bir listeyle şunları yapabilirsiniz:

list.AddRange(otherCollection);

Bir HashSet içinde aralık ekleme yöntemi yoktur . HashSet'e başka bir koleksiyon eklemenin en iyi yolu nedir?

Yanıtlar:


547

Çünkü HashSet<T>adı UnionWith.

Bu, HashSetçalışmaların farklı yolunu göstermek içindir . İçinde Addolduğu gibi rasgele bir dizi öğeyi güvenle kullanamazsınız Collections, bazı öğeler doğal olarak buharlaşabilir.

Bence bu UnionWith"başka biriyle birleştikten sonra" adını alır HashSet, ancak, aşırı yük IEnumerable<T>de var.


9
Imho, HashSet(ve ISet) matematiksel olarak ayarlanmış bir terimle oluşturuldu. UnionWithyakın terimdi. Matematiksel Exceptolarak açık bir şekilde adlandırılması dışında Subtract.
fa wildchild

5

Bu bir yol:

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;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.