我希望在同一索引处替换Dictionary的某个条目。 我正在考虑创建一个扩展方法(这将涉及:
就像我一样 列表
{a,1}
{b,2}
{c,3}
我希望它有
{a,1}
{f,5}
{c,3}
By Something like dic.Replace(b,f,5)
答案 0 :(得分:5)
不保留字典中的顺序,因此您无法尝试执行此操作。
出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair结构。返回项目的顺序未定义。
但是有一个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
没有索引,只有键。您可能正在寻找OrderedDictionary
或List
和Dictionary
的自定义组合。
答案 4 :(得分:0)
没有有效的 保证方式。但是假设你真的想要你说的话。好吧,虽然绝对不是一个好习惯,但目前实现ok.dispatchEvent("click")
的方式实际上允许这种行为。如果删除某个键并立即添加新项目,它将显示在枚举时与删除的位置相同的位置。这就是以下工作的原因:
Dictinary<Tkey, TValue>
那么,它目前是否有效 - 是的(事实)。是否保证将来有效 - 没有。应该使用这样的技术 - 嗯,这取决于他。
答案 5 :(得分:-1)
我误解了这个问题。
在这种情况下,这样的事情应该有效:
{{ login_check }}