2010-08-01 34 views
1

我需要一個解釋,其關鍵是例如Dictionary<int[],string>詞典整數數組作爲重點

Dictionary<List<int>,string>. 

的整數數組,但我很驚訝的是,平等法和散列碼方法不適合我定義。除了創建我自己的MyType: List<int>並定義所有必要的方法之外,是否有任何簡單的方法來實現這樣的結構?

回答

2

它不是預定義的,因爲它是昂貴的。如果你知道你的清單很短,那麼只需執行明顯的覆蓋。如果不是的話,你至少需要爲GetHashCode提供一些啓發式的方法。比方說,只有第一對元素的GetHashCode與長度一起變化。

+1

我認爲啓發式應該包括長度(重)。其餘的則取決於域,取樣列表可能比僅使用第一個元素更好。 – 2010-08-01 20:13:08

+0

@亨克,非常好點,補充說。 – 2010-08-01 20:15:26

+1

排序的列表是否具有與未排序不同的散列?有許多原因不是提供默認實現(編輯:並對容器內容做出假設),而是純粹的費用。 – Marc 2010-08-01 20:36:43

1

GetHashCode和Equality是爲List定義的,它們只是沒有被覆蓋,給你的行爲,你可能會期望,而不是。

如果你使用.NET 3.5,你可以寫一個實現兩個GetHashCode()的覆蓋列表中的一個擴展方法,並Equality()

+1

但'字典<,>'方法會使用這些擴展方法嗎? – strager 2010-08-01 20:22:10

0

而不是創建自己的類型,你可以提供兩種方法某處

string ConvertListToString(List<int> l){...}; 
List<int> ConvertStringToList(string s){...}; 

並使用Dictionary<string,string>代替。

+1

非常好,如果(且僅當)列表相當短。 – 2010-08-01 20:29:30