Apakah ada setara AddRange untuk HashSet di C #

306

Dengan daftar yang dapat Anda lakukan:

list.AddRange(otherCollection);

Tidak ada metode rentang tambah di HashSet . Apa cara terbaik untuk menambahkan koleksi lain ke HashSet?

Stefanos Kargas
sumber

Jawaban:

547

Sebab HashSet<T>, namanya UnionWith.

Ini untuk menunjukkan cara HashSetkerja yang berbeda. Anda tidak dapat dengan aman Addsatu set elemen acak seperti di dalamnya Collections, beberapa elemen mungkin secara alami menguap.

Saya pikir itu UnionWithmengambil namanya setelah "bergabung dengan yang lain HashSet", namun, ada kelebihan IEnumerable<T>juga.

quetzalcoatl
sumber
9
Imho, HashSet(dan ISet) dibuat dengan istilah yang ditetapkan secara matematis. UnionWithadalah istilah yang lebih dekat. Kecuali Except, yang jelas harus dinamai Subtract, secara matematis.
fa wildchild
5

Ini satu cara:

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;
    }
}
RoadieRich
sumber