【问题标题】:Changing the Key of a Dictionary更改字典的键
【发布时间】:2012-06-13 20:56:08
【问题描述】:

我对字典很陌生。大约 6 小时前我开始使用它们的非常新的含义:p。无论如何,我想知道是否有办法更改字典的键。

这是我的字典:

Dictionary<string, string> Information = new Dictionary<string, string>();

这是我添加到字典中的方式(每次用户输入信息并点击按钮时都会触发:

Information.Add(txtObjectNumber.Text, addressCombined);

用户需要能够编辑这两个字段以及删除整个记录。

应用程序几乎需要添加txtNumber 和txtComments 其中txtNumber = txtObjectNumber

感谢您的帮助。

【问题讨论】:

  • txtNumber 和 txtComments 在您的代码中出现在哪里?您确定要使用字典而不是存储两个(或更多)值的对象列表吗?
  • 你可能没有使用正确的数据结构。
  • 对不起,这些只是用户可以输入数据的文本框。我绝对应该更清楚。
  • @Oded :是的,我开始考虑只做一个数组,但到目前为止字典工作得很好:/
  • 如果您使用的是 .NET 4.0,请查看 Tuple 类。

标签: c# dictionary


【解决方案1】:

无法直接修改密钥。您必须删除它并重新添加它。

【讨论】:

    【解决方案2】:

    关键是允许您稍后找到数据(“值”)的机制。

    例如,如果你这样做了

    information.Add("Kris", "Vandermotten");
    

    如果您知道“Kris”,您以后可以找到“Vandermotten”。

    现在在这种情况下,改变“Kris”是什么意思?您将数据放在名称“Kris”下,并希望通过搜索“Bob”将其取回?你不会找到它。

    在某种程度上,字典键非常类似于关系数据库中的主键。指的是值的逻辑标识。因此,一方面,他们应该唯一标识它。

    所以也许这个例子没有意义。也许像

    information.Add(42, new Person("Kris", "Vandermotten")
    

    更有意义。那么问题当然是:42 是什么?有时这种键有一个自然的候选者,比如员工编号或其他东西,有时则没有。

    当没有时,也许你需要做

    List<Person> information = new List<Person>();
    
    information.Add(new Person("Kris", "Vandermotten"));
    

    当然,如果 Person 对象允许更改名字属性,而这正是您想要做的,那就去做吧。但是“更改字典键”对我来说没有多大意义。

    【讨论】:

    • 我在读你的例子,就像,他从哪里得到“Vandermotten”。然后我在最后看到了你的名字。我唯一的想法是,真棒的名字。
    • @CalvinSmith 谢谢。我爸给我的。我会转达你的评论。 ;-)
    【解决方案3】:

    您可以为您的字典使用内置的 Remove() 方法。或者你可以通过遍历集合来完成它。尽管我很好奇为什么您需要不断更新键,而不仅仅是值。

    【讨论】:

    • 我需要两者都做。几乎关键是水表产品编号。更换产品密钥后,产品密钥将发生变化,而 cmets 可能会更改,也可能不会更改。但地址需要保持不变。
    • 听起来你可能需要 Dictionary
      和 Dictionary
    • 当...我为什么没想到哈哈。谢谢,你让我免于改变很多事情。它可能会有点乱,但它应该可以工作哈哈。
    【解决方案4】:

    您不能更改现有字典项的键。您可以做的是删除以前的键并根据编辑添加一个新的键/值。

    示例用例:

    添加键:名称,值:鲍勃

    现在您想将Name 更改为FirstName,您必须这样做

    从字典中删除键 Name 添加键:名字,值:鲍勃

    【讨论】:

      【解决方案5】:

      您在这里使用字典似乎有点不对劲。顾名思义,字典旨在为您提供一种基于键“查找”值的方法。但是,在您的情况下,您似乎正在使用它来存储两个相关的数据,其中任何一个都可以更改。在这种情况下,您最好只使用一个列表,并创建一个单独的类来封装这两条信息。类似的东西

      public class MyData
      {
          public string SomeData { get; set; }
          public string OtherData { get; set; }
      }
      

      然后

      List<MyData> myDataList;
      

      或者,您甚至可能想要一个将不变键(可能是用户 ID)映射到自定义类的字典:

      Dictionary<string, MyData> myDataDictionary;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-20
        • 2020-12-27
        • 2022-07-12
        • 2011-05-23
        • 2021-04-14
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多