¿Hay un AddRange equivalente para un HashSet en C #?


306

Con una lista puedes hacer:

list.AddRange(otherCollection);

No hay un método de agregar rango en un HashSet . ¿Cuál es la mejor manera de agregar otra colección a un HashSet?

Respuestas:


547

Pues HashSet<T>el nombre es UnionWith.

Esto es para indicar la forma distinta en que HashSetfunciona. No puede con seguridad Addun conjunto de elementos aleatorios como en Collectionsalgunos, algunos elementos pueden evaporarse naturalmente.

Creo que UnionWithtoma su nombre después de "fusionarse con otro HashSet", sin embargo, también hay una sobrecarga IEnumerable<T>.


99
Imho, HashSet(y ISet) fue creado con un término matemáticamente establecido. UnionWithEra el término más cercano. Excepto por Except, que claramente debería llamarse Subtractmatemáticamente hablando.
fa wildchild

5

Esta es una forma:

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;
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.