448 Stimmen

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

Mit einer Liste kannst du folgendes tun:

list.AddRange(otherCollection);

Es gibt keine AddRange-Methode in einem HashSet. Wie fügt man am besten eine andere ICollection zu einem HashSet hinzu?

798voto

quetzalcoatl Punkte 29919

Für HashSet lautet der Name UnionWith.

Dies soll auf die besondere Art und Weise hinweisen, wie HashSet funktioniert. Sie können nicht sicher ein Set zufälliger Elemente hinzufügen wie bei Collections, einige Elemente könnten natürlicherweise verdunsten.

Ich denke, dass UnionWith seinen Namen nach dem "Vereinigen mit einem anderen HashSet" hat, jedoch gibt es auch eine Überladung für IEnumerable.

9voto

RoadieRich Punkte 5928

Dies ist eine Möglichkeit:

public static class Extensions
{
    public static bool AddRange(this HashSet source, IEnumerable items)
    {
        bool allAdded = true;
        foreach (T item in items)
        {
            allAdded &= source.Add(item);
        }
        return allAdded;
    }
}

6voto

Andrew Punkte 101

Sie können auch CONCAT mit LINQ verwenden. Dadurch wird eine Sammlung oder speziell ein HashSet an eine andere angehängt.

    var A = new HashSet() { 1, 2, 3 };  // Inhalt von HashSet 'A'
    var B = new HashSet() { 4, 5 };     // Inhalt von HashSet 'B'

    // 'B' an 'A' anhängen
    A = A.Concat(B).ToHashSet();    // Alternativ kann auch: ToList(), ToArray(), ... verwendet werden

    // 'A' enthält jetzt auch den Inhalt von 'B'
    Console.WriteLine(A);
    >>>> {1, 2, 3, 4, 5}

HINWEIS: Concat() erstellt eine komplett neue Sammlung. Außerdem ist UnionWith() schneller als Concat().

"... dies (Concat()) setzt auch voraus, dass Sie tatsächlich Zugriff auf die Variable haben, die auf das Hash-Set verweist, und dürfen es ändern, was nicht immer der Fall ist." – @PeterDuniho

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X