我对C#很陌生,并且遇到了收藏问题。我有一些词汇,有些价值说:[(5,“abc”),(6,“def”)]。我调用一个方法并获得一个List,如:{“mno”,“pqr”}。现在我想用列表的内容更新字典的值。问题是地图的关键可以从任何数字开始,比如从5开始。但是新列表的起始索引将一如既往地为0,列表和地图的长度都相同...所以我可以所以:map [i] = list [i],因为它们不匹配。有人可以告诉我如何用列表的内容替换字典的内容?拜托!!!
答案 0 :(得分:1)
简单循环
for (int index = 0; index < map.Count; index++)
{
map[map.ElementAt(index).Key] = list[index];
}
使用Linq
var result = map.Zip(list, (m, l) => new { Key = m.Key, Value = l })
.ToDictionary(p => p.Key, p => p.Value);
答案 1 :(得分:0)
这是一个使用LINQ的方法,它将使用与旧字典相同的键创建一个新的Dictionary
,但来自列表的值:
map = map.Keys
.OrderBy(k => k)
.Zip(list, (k, v) => new KeyValuePair<int, string>(k, v))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
如果您需要更新原始Dictionary
而不是创建新的foreach (var kvp in map.Keys
.OrderBy(k => k)
.Zip(list, (k, v) => new KeyValuePair<int, string>(k, v)))
map[kvp.Key] = kvp.Value;
,则可以执行此操作:
{{1}}