Есть ли эквивалент AddRange для HashSet в C #


307

Со списком вы можете сделать:

list.AddRange(otherCollection);

В HashSet нет метода добавления диапазона . Каков наилучший способ добавить еще одну коллекцию в HashSet?

Ответы:


547

Ибо HashSet<T>имя UnionWith.

Это должно указать на отличный способ HashSetработы. Вы не можете безопасно Addнабор случайных элементов к нему, как в Collections, некоторые элементы могут естественно испаряться.

Я думаю, что это UnionWithберет свое имя после «слияния с другим HashSet», однако, есть и перегрузка IEnumerable<T>.


9
Imho, HashSetISet) был создан с математически заданным термином. UnionWithбыл ближе термин. За исключением того Except, что явно должно быть названо Subtract, математически говоря.
fa wildchild

5

Это один из способов:

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;
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.