Gibt es ein AddRange-Äquivalent für ein HashSet in C #?


306

Mit einer Liste können Sie Folgendes tun:

list.AddRange(otherCollection);

In einem HashSet gibt es keine Methode zum Hinzufügen von Bereichen . Was ist der beste Weg, um einem HashSet eine weitere Sammlung hinzuzufügen?

Antworten:


547

Denn HashSet<T>der Name ist UnionWith.

Dies soll die unterschiedliche Funktionsweise anzeigen HashSet. Sie können nicht sicher Addeine Reihe von zufälligen Elementen wie in Collections, einige Elemente können natürlich verdunsten.

Ich denke, das UnionWithhat seinen Namen nach "Zusammenführen mit einem anderen HashSet", aber es gibt auch eine Überlastung für IEnumerable<T>.


9
Imho, HashSet(und ISet) wurde mit einem mathematisch festgelegten Term erstellt. UnionWithwar der nähere Begriff. Mit Ausnahme von Except, die Subtractmathematisch gesehen eindeutig als benannt werden sollten .
Fa Wildchild

5

Dies ist eine Möglichkeit:

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;
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.