最好的方法是什么?
var set2 = new HashSet<reference_type>();
像这样使用 foreach 遍历集合。
foreach (var n in set)
set2.Add(n);
或者使用类似这样的联合。
set2 = set.UnionWith(set); // all the elements
最好的方法是什么?
var set2 = new HashSet<reference_type>();
像这样使用 foreach 遍历集合。
foreach (var n in set)
set2.Add(n);
或者使用类似这样的联合。
set2 = set.UnionWith(set); // all the elements
使用构造函数:
HashSet<type> set2 = new HashSet<type>(set1);
就我个人而言,我希望 LINQ to Objects 有一个ToHashSet
扩展方法,就像它对List
和Dictionary
. 当然,创建自己的课程很容易:
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
return new HashSet<T>(source);
}
(自定义相等比较器的另一个重载。)
这使得创建匿名类型的集合变得容易。
最好是主观的,但我会这样做:
set2 = new HashSet<type>(set);
甚至更好:
set2 = new HashSet<type>(set, set.Comparer);
这可确保您使用与原始 HashSet 相同的相等比较器。例如,如果原始文件不区分大小写HashSet<string>
,那么您的新文件也将不区分大小写。
这可能是最简单和最好的:
HashSet<int> s = new HashSet<int>{1,2,3};
HashSet<int> t = new HashSet<int>(s);
从MSDN 文档:
HashSet<T>(IEnumerable<T> collection)
初始化 HashSet 类的新实例,该实例使用集合类型的默认相等比较器,包含从指定集合复制的元素,并且有足够的容量容纳复制的元素数量。