在C#中将集合用作键

目录

介绍

使用这个混乱


使用集合作为键可以使复杂的功能构造更轻松地用C#表示。这段代码提供了两个类,可以对集合进行有序或无序的相等比较,以便它们可用作字典和集合中的键。

下载Comparers-master.zip-10.5 KB

介绍

有时,当用C#表达复杂的算法时,您可能发现自己需要根据一组项目而不是单个项目来查找某些信息。Stock.NET提供了一些通过LINQ进行此操作的功能,但它并不是通用的,例如Dictionary<TKey,TValue> 可以使用它。

这个小库旨在提供两种比较方式,以使这些类型的操作变得容易。

使用这个混乱

注意事项

键不应该是可变的,但是由于集合的工作方式,这些键在不应该是可变的时是可变的。不要修改用作键的集合!它将导致您讨厌的错误。

该库公开了两个类,OrderedCollectionEqualityComparer<T>UnorderedCollectionEqualityComparer<T>,分别提供有序和无序比较。他们致力于实现IList<T>ICollection<T>ISet<T>的任何工作。无序比较可能会很昂贵,但是为您的集合使用HashSet<T>可以加快一些速度。您可以使用这些类来提供Dictionary<TKey, TValue>HashSet<TKey, TValue>来比较集合而不是单个项。演示代码指示如何使用它们:

// create a new hashset that uses ordered collection comparisons
var set = new HashSet<int[]>(OrderedCollectionEqualityComparer<int>.Default);
// add a collection:
set.Add(new int[] { 1, 2, 3, 4, 5 });

// true:
Console.WriteLine("Ordered cmp - contains 1-5: " + set.Contains(new int[] { 1, 2, 3, 4, 5 }));
// false:
Console.WriteLine("Ordered cmp contains 5-1: " + set.Contains(new int[] { 5, 4, 3, 2, 1 }));

// create a new hashset that uses unordered collection comparisons
set = new HashSet<int[]>(UnorderedCollectionEqualityComparer<int>.Default);
set.Add(new int[] { 1, 2, 3, 4, 5 });

// true:
Console.WriteLine("Unordered cmp - contains 1-5: " + set.Contains(new int[] { 1, 2, 3, 4, 5 }));
// true:
Console.WriteLine("Unordered cmp contains 5-1: " + set.Contains(new int[] { 5, 4, 3, 2, 1 }));

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值