在C#中有类似Dictionary.Replace(key,new KeyValuePair <newkey> <newvalue>)的内容吗?

时间:2015-08-17 14:16:15

标签: c# dictionary

我希望在同一索引处替换Dictionary的某个条目。 我正在考虑创建一个扩展方法(这将涉及:

  1. 遍历所有密钥,直到找到该密钥
  2. 然后添加新的键值对
  3. 附加剩余的密钥 ) 还有其他最佳方法吗?
  4. 就像我一样 列表

    {a,1}
    {b,2}
    {c,3}
    

    我希望它有

    {a,1}
    {f,5}
    {c,3}
    By Something like dic.Replace(b,f,5)
    

6 个答案:

答案 0 :(得分:5)

不保留字典中的顺序,因此您无法尝试执行此操作。

  

出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair结构。返回项目的顺序未定义。

以下是documentation in MSDN

但是有一个OrderedDictionary和一个SortedDictionary类。如果任何一个适合您的需要,您必须投资

答案 1 :(得分:1)

您可以删除密钥并添加新密钥。

    public void Replace<T1,T2>(Dictionary<T1, T2> d, T1 key, T1 newKey, T2 newValue)
    {
        if (d.ContainsKey(key))
        {
            d.Remove(key);
            d.Add(newKey, newValue);
        }
    }

没有内置的Replace方法。但你可以使用这种方法。例如:

Dictionary<string, int> d = new Dictionary<string, int>();    
d.Add("a", 1);
Replace(d, "a", "b", 2);
// will change the key "a" with value 1 to key "b" with value 2

答案 2 :(得分:0)

默认情况下,字典没有.Replace()方法。字典是未编制索引的数据结构,因此迭代所有键是没有意义的 - 您只需添加新数据然后删除旧数据,如下所示:

        if (dictionary.ContainsKey(newKey))
        {
            dictionary.Remove(newKey);
        }
        dictionary.Add(newKey, newValue);
        if (dictionary.ContainsKey(oldKey))
        {
            dictionary.Remove(oldKey);
        }

答案 3 :(得分:0)

Dictionary没有索引,只有键。您可能正在寻找OrderedDictionaryListDictionary的自定义组合。

答案 4 :(得分:0)

没有有效的 保证方式。但是假设你真的想要你说的话。好吧,虽然绝对不是一个好习惯,但目前实现ok.dispatchEvent("click") 的方式实际上允许这种行为。如果删除某个键并立即添加新项目,它将显示在枚举时与删除的位置相同的位置。这就是以下工作的原因:

Dictinary<Tkey, TValue>

那么,它目前是否有效 - 是的(事实)。是否保证将来有效 - 没有。应该使用这样的技术 - 嗯,这取决于他。

答案 5 :(得分:-1)

我误解了这个问题。

在这种情况下,这样的事情应该有效:

{{ login_check }}