我需要一個解釋,其關鍵是例如Dictionary<int[],string>
或詞典整數數組作爲重點
Dictionary<List<int>,string>.
的整數數組,但我很驚訝的是,平等法和散列碼方法不適合我定義。除了創建我自己的MyType: List<int>
並定義所有必要的方法之外,是否有任何簡單的方法來實現這樣的結構?
我需要一個解釋,其關鍵是例如Dictionary<int[],string>
或詞典整數數組作爲重點
Dictionary<List<int>,string>.
的整數數組,但我很驚訝的是,平等法和散列碼方法不適合我定義。除了創建我自己的MyType: List<int>
並定義所有必要的方法之外,是否有任何簡單的方法來實現這樣的結構?
它不是預定義的,因爲它是昂貴的。如果你知道你的清單很短,那麼只需執行明顯的覆蓋。如果不是的話,你至少需要爲GetHashCode提供一些啓發式的方法。比方說,只有第一對元素的GetHashCode與長度一起變化。
GetHashCode和Equality是爲List定義的,它們只是沒有被覆蓋,給你的行爲,你可能會期望,而不是。
如果你使用.NET 3.5,你可以寫一個實現兩個GetHashCode()
的覆蓋列表中的一個擴展方法,並Equality()
但'字典<,>'方法會使用這些擴展方法嗎? – strager 2010-08-01 20:22:10
而不是創建自己的類型,你可以提供兩種方法某處
string ConvertListToString(List<int> l){...};
List<int> ConvertStringToList(string s){...};
並使用Dictionary<string,string>
代替。
非常好,如果(且僅當)列表相當短。 – 2010-08-01 20:29:30
我認爲啓發式應該包括長度(重)。其餘的則取決於域,取樣列表可能比僅使用第一個元素更好。 – 2010-08-01 20:13:08
@亨克,非常好點,補充說。 – 2010-08-01 20:15:26
排序的列表是否具有與未排序不同的散列?有許多原因不是提供默認實現(編輯:並對容器內容做出假設),而是純粹的費用。 – Marc 2010-08-01 20:36:43