如何在 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);

可能吗?

如何在 C# 中动态更改字典中的键

这表明您完全错误地使用了字典。字典是键和值之间的映射。如果我们从"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
  • 更改字典键的最佳方法