2012-08-07 54 views
-2

我在c#中有以下代碼,基本上它是一個帶有一些鍵和值的簡單字典 。現在我想更新 此字典中的現有密鑰與新密鑰。可能嗎?如何動態更改c#中的字典中的鍵?

Dictionary<string, int> dictionary = new Dictionary<string, int>(); 
dictionary.Add("00", 2); 
dictionary.Add("01", 1); 
dictionary.Add("02", 0); 
dictionary.Add("03", -1); 

在一定的條件下我與主要01.

刪除的價值現在,我必須更新像下面的刪除鍵下方的關鍵。

dictionary.Add("00", 2); 
dictionary.Add("01", 0); 
dictionary.Add("02", -1); 

這可能嗎?

+0

這是'ordereddictionary'嗎? – 2012-08-07 06:31:38

回答

5

這表明您使用的字典完全不正確。字典是鍵和值之間的映射。如果我們從「字典」中刪除單詞(帶有單詞的單詞),則定義不會全部移動一個單詞!

做你想做什麼,只是用一個列表,並使用指數的地方,你目前如何使用的關鍵

var list = new List<int>(); 
list.Add(2); 
list.Add(1); 
list.Add(0); 
list.Add(-1); 
//... 
list.RemoveAt(1); 

現在列表爲{指標,值} :{0, 2}, {1, 0}, {2, -1}

+0

然後他可以將它們轉換爲索引作爲鍵和值作爲值的詞典。 – 2012-08-07 06:39:35

+1

@NikhilAgrawal是的,但是爲什麼當你可以使用列表索引器,即list [2] = 8; Console.WriteLine(list [0]);'? – 2012-08-07 07:04:41

0

你想要一個 'AddOrUpdate' 的方法:

static class DictionaryExtensions 
{ 
    public static void AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue value) 
    { 
     if (dict.ContainsKey(key)) 
     { 
      dict[key] = value; 
     } 
     else 
     { 
      dict.Add(key, value); 
     } 
    } 
} 

然後我打電話t像這樣:

Dictionary<string, int> dictionary = new Dictionary<string, int>(); 
dictionary.AddOrUpdate("00", 2); 
+1

這個問題似乎更多地涉及一個不同尋常的意圖當*去除*;看看刪除'01'(問題)後鍵/值如何移動 – 2012-08-07 06:36:15

+0

確實,忽略了這一點! – Bas 2012-08-07 07:50:36

+0

這與問題無關。而按照你的方法建議的'AddOrUpdate','dict [key] = value;'就足夠了。 – nawfal 2013-03-31 09:54:25

1

爲什麼你在第一個地方使用字典?看起來你應該使用一個列表或數組。

+0

其實我的要求是 – Devi 2012-08-07 07:02:42

+0

我必須爲圖表中的每個圖表系列添加屬性窗口。該系列可能位於chartarea1,chartarea2之類的任何圖表區域中。可能有任何序列號。我根據指數chartareano + seriesno添加了。在這裏,我的實際問題是,刪除系列時,相應的屬性應該被刪除。並且其他屬性窗口索引應該被seriesno-1縮小。 – Devi 2012-08-07 07:10:43

+0

我不得不承認,我不完全明白你需要什麼。而且我仍然不相信字典是最好的結構。從它的聲音中,您應該爲所有對象分配正確的ID,並且永遠不要通過數據結構中的索引來引用它們。從字典中刪除一個元素不應該影響其他元素。 – Jan 2012-08-07 07:47:27

0

您可以做到這一點,但是如果您移除密鑰然後重新添加,您將獲得相同的效果。該字典是使用散列表實現的,所以如果您以某種方式更改了密鑰,則必須重新輸入條目。

這裏是你怎麼可能去這樣做的擴展(類似於引用的SO問題):

public static UpdateKeyName<TKey, TValue>(Dictionary<TKey, TValue> dic this, 
             TKey fromKey, TKey toKey) 
{ 
    TValue value = dic[fromKey]; 
    dic.Remove(froKeym); 
    dic[toKey] = value; 
} 

在C#字典進一步的信息可以在這裏找到:

+0

這與問題無關。 – nawfal 2013-03-31 09:53:17