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?

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.


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;
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.