在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 }));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章