Existe-t-il un équivalent AddRange pour un HashSet en C #

306

Avec une liste, vous pouvez faire:

list.AddRange(otherCollection);

Il n'y a pas de méthode d'ajout de plage dans un HashSet . Quelle est la meilleure façon d'ajouter une autre collection à un HashSet?

Stefanos Kargas
la source

Réponses:

547

Car HashSet<T>, le nom est UnionWith.

C'est pour indiquer la façon distincte dont HashSetfonctionne le travail. Vous ne pouvez pas en toute sécurité Addun ensemble d'éléments aléatoires comme dans Collections, certains éléments peuvent naturellement s'évaporer.

Je pense que cela UnionWithprend son nom après avoir "fusionné avec un autre HashSet", cependant, il y a une surcharge pour IEnumerable<T>trop.

quetzalcoatl
la source
9
Imho, HashSet(et ISet) a été créé avec un terme défini mathématiquement. UnionWithétait le terme le plus proche. Sauf pour Except, qui devrait clairement être nommé comme Subtract, mathématiquement parlant.
fa wildchild
5

C'est une façon:

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
la source