Existe um equivalente AddRange para um HashSet em c #

306

Com uma lista, você pode fazer:

list.AddRange(otherCollection);

Não há método de adição de intervalo em um HashSet . Qual é a melhor maneira de adicionar outra coleção a um HashSet?

Stefanos Kargas
fonte

Respostas:

547

Pois HashSet<T>, o nome é UnionWith.

Isso é para indicar a maneira distinta de HashSettrabalhar. Você não pode seguramente Addcriar um conjunto de elementos aleatórios, como Collectionsalguns elementos, naturalmente podem evaporar.

Eu acho que UnionWithleva esse nome depois de "mesclar com outro HashSet", no entanto, também há uma sobrecarga IEnumerable<T>.

quetzalcoatl
fonte
9
Imho, HashSet(e ISet) foi criado com o termo definido matematicamente. UnionWithfoi o termo mais próximo. Exceto por Except, que claramente deve ser nomeado como Subtract, matematicamente falando.
precisa saber é
5

Esta é uma maneira:

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
fonte