目錄
使用集合作爲鍵可以使複雜的功能構造更輕鬆地用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 }));