按值更改字典键

本文关键字:字典 | 更新日期: 2023-09-27 18:23:48

如何在Dictionary中按值更改键?

我有这样的代码:

public Dictionary<string, int> Groups = new Dictionary<string, int>();
Groups.Add("apple", 0);

我需要这样做:

Groups.Update("0") = "pear"

按值更改字典键

您很可能不想这样做。这里有一些变量:

  1. 上一个键值对发生了什么?apple是否与pear一起更改?

  2. 如果pear已经存在怎么办?它的价值会怎样?

  3. 如果您有多个具有相同值的密钥,例如apple => 0orange => 0,会发生什么情况。Update("0") = "pear"将尝试将两个密钥都设置为pear,这是不可能的,并且其中一个密钥将消失

如果您仍然确定要执行此操作,那么只需遍历KeyValuePair并找到Value0的项。然后移除其Key,并添加具有新密钥和旧值的新密钥=>值对。

var key = "";
foreach (var item in dictionary)
{
    if (item.Value == "desired_value")
    {
        key = item.Key
        break;
    }
}
dictionary.Remove(key);
dictionary.Add(newKey, "desired_value");

我不认为有一个简单的方法可以做到这一点,但你可以使用LINQ找到密钥,然后删除对:

var key = Groups.Single(p => p.Value == 0).Key;
Groups.Remove(key);
Groups.Add("pear", 0);

这还会为无效键或多对抛出异常。

首先,您必须确保键在字典中是唯一的,基于GetHashCode和equals方法。

第二:我会删除它的键的值,并创建一些新的值。只需将它们存储在其他变量中即可。

编辑

如果要为行号存储单词列表,请改用:Dictionary<int, IList<string>>。只是一个提示。这样你就可以通过按键访问一行中的所有单词。