目录
使用集合作为键可以使复杂的功能构造更轻松地用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 }));