在c#中是否有一个AddRange等价于HashSet

有了一个列表,你可以做:

list.AddRange(otherCollection);
HashSet中没有add range方法。 将另一个ICollection添加到HashSet的最佳方法是什么?< / p >
113704 次浏览

对于HashSet<T>,名称是UnionWith

这是为了指出HashSet的独特工作方式。你不能像Collections那样安全地将一组随机元素Add放到它里面,有些元素可能会自然蒸发。

我认为UnionWith得名于“与另一个HashSet合并”,然而,IEnumerable<T>也有重载。

这是一种方法:

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;
}
}

你也可以在LINQ中使用CONCAT。这将附加一个集合,特别是HashSet<T>到另一个集合。

    var A = new HashSet<int>() { 1, 2, 3 };  // contents of HashSet 'A'
var B = new HashSet<int>() { 4, 5 };     // contents of HashSet 'B'


// Concat 'B' to 'A'
A = A.Concat(B).ToHashSet();    // Or one could use: ToList(), ToArray(), ...


// 'A' now also includes contents of 'B'
Console.WriteLine(A);
>>>> {1, 2, 3, 4, 5}

注意: Concat()创建一个全新的集合。而且,UnionWith()比Concat()更快。

... this (Concat())还假设你实际上可以访问引用哈希集的变量,并允许修改它,但情况并不总是如此。"——@PeterDuniho