如何在 C# 中动态更改字典中的键
本文关键字:字典 动态 | 更新日期: 2024-11-09 03:04:32
我在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);
可能吗?
这表明您完全错误地使用了字典。字典是键和值之间的映射。如果我们从"the"字典(有单词的东西)中删除一个单词,定义不会全部移动一个单词!
要执行所需的操作,只需使用列表,并使用索引代替当前使用键的方式:
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}
你为什么首先使用字典?看起来您应该使用列表或数组。
你需要一个"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);
}
}
}
然后这样称呼它:
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.AddOrUpdate("00", 2);
您可以这样做,但是如果您删除密钥然后再次添加它,您将获得相同的效果。字典是使用哈希表实现的,因此如果您以某种方式更改了键,则该条目必须已重新哈希。
以下是您如何执行此操作的扩展(类似于参考的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# 词典的更多信息,请参阅此处:
- http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
- 更改字典键的最佳方法