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?

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.


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;
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.