Czy istnieje odpowiednik AddRange dla HashSet w C #


305

Za pomocą listy możesz:

list.AddRange(otherCollection);

W HashSet nie ma metody dodawania zakresu . Jaki jest najlepszy sposób na dodanie kolejnej kolekcji do HashSet?

Odpowiedzi:


545

Bo HashSet<T>nazwa to UnionWith.

Ma to na celu wskazanie odrębnego sposobu HashSetdziałania. Nie możesz bezpiecznie Addzestaw losowych elementów, jak w Collectionsniektórych, niektóre elementy mogą naturalnie wyparować.

Myślę, że UnionWithbierze to swoją nazwę po „połączeniu z innym HashSet”, ale jest też przeciążenie IEnumerable<T>.


9
Imho HashSet(i ISet) został stworzony z matematycznie ustalonym terminem. UnionWithbył bliższym terminem. Z wyjątkiem Except, które wyraźnie należy nazwać Subtractmatematycznie.
fa wildchild

5

To jest jeden sposób:

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;
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.