2017-04-19 39 views
0

我有一個整數數組作爲鍵和圖像作爲值的字典集合。在添加new int[]之前,我需要檢查相同的密鑰是否已經存在。如何在使用ContainsKey方法的字典中檢查Int數組(鍵)?

我已經試過下面的代碼,但Dictionary.ContainsKey(int[])方法總是會失敗,即使是相同的key已經存在。

Dictionary<int[], Image> temp = new Dictionary<int[], Image>(); 
int[] rowcol = new int[]{rowIndex,colIndex}; 
if (!temp.ContainsKey(rowcol)) 
{ 
    animatedImage = style.BackgroundImage; 
    temp.Add(rowcol, animatedImage); 
} 

請建議我如何檢查在Dictionaryint[]key

感謝

+0

使用'元組'。 – john

+1

您正在傳遞包含相同項目的數組的差異實例,當然它們不會被視爲相同。 'new [] {1} == new [] {1}'也返回false。 – Rob

+0

另請參閱https://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode –

回答

2

試試下面的代碼:

private void sample() 
{ 
    int rowIndex = 0; 
    int colIndex = 0; 
    Dictionary<int[], Image> temp = new Dictionary<int[], Image>(); 
    int[] rowcol = new int[] { rowIndex, colIndex }; 


    if (!(temp.Where(k => k.Key == rowcol).Count() > 0)) 
    { 
     animatedImage = style.BackgroundImage; 
     temp.Add(rowcol, animatedImage); 
    } 
} 
+0

哇。這不起作用,因爲你也比較參考。將'k.Key == rowcol'更改爲'k.Key.SequenceEqual(rowcol)'可能會有效,但是您將失去字典在列表中的優勢。順便說一句:即使第一個值與你的約束匹配,你也會遍歷所有值。使用'Any()'而不是'Count()'將在第一次出現後停止。 –

相關問題