C#HasSet<T>

        .NET3.5多了个HasSet<T>用来存储集合。从名称可以看出,它是基于Hash的。HashSet<T>类提供高性能的设置操作。类似于访问Dictionary<TKey, TValue> 或Hashtable集合的键。 简而言之 HashSet<T> 可以将类视为Dictionary<TKey, TValue>没有值的集合。简单的说它的Contains方法的性能在大数据量时比List <T>好得多。HashSet<T>的Contains方法复杂度是O(1),List<T>的Contains方法复杂度是O(n)。
       HashSet<T> 集合未进行排序,并且不能包含重复元素。 如果顺序或元素复制比应用程序的性能更重要,请考虑结合List<T> Sort使用类和方法。

    List与HashSet互相转换,可以达到List去重的目的:

List<int> lis = new List<int>() { 1,2,1,1,1};
HashSet<int> hs = new HashSet<int>(lis);
lis = new List<int>(hs);

      Linq set 操作和HashSet<T>操作之间的主要区别在于,linq set 操作始终返回新IEnumerable<T>集合,而HashSet<T>等效方法修改当前集合。

       通常情况下,如果您必须创建新的集或您的应用程序只需要访问所提供的 set 操作,则对任何IEnumerable<T> 集合或数组使用 LINQ set 操作都足够了。 但是,如果你的应用程序需要访问其他设置操作,或者如果不需要或不需要创建新集合,请使用HashSet<T> 类。

方法:

HashSet<int> hasA = new HashSet<int>() { 1, 2, 3 };
HashSet<int> hasB = new HashSet<int> { 2, 3, 4 };

//合并两个不同的集
hasA.UnionWith(hasB);   //结果: { 1,2,3,4 }

//交集,修改当前的 HashSet<T> 对象,以仅包含该对象和指定集合中存在的元素。
hasA.IntersectWith(hasB);  //结果: { 2,3 }

//减法,从当前 HashSet<T> 对象中移除指定集合中的所有元素。
hasA.ExceptWith(hasB);  //结果: { 1 }

//交集取反
hasA.SymmetricExceptWith(hasB); // 结果: { 1,4 }

//将 HashSet<T> 集合中的元素复制到数组中。
int[] ii = new int[hasA.Count];
hasA.CopyTo(ii);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值