0

我对 C# 很陌生,并且遇到了集合问题。我有一些值的字典说:[(5,“abc”),(6,“def”)]。我调用一个方法并得到一个类似的列表:{“mno”,“pqr”}。现在我想用列表的内容更新字典的值。问题是地图的键可以从任何数字开始,比如从 5。但是新列表的起始索引将像往常一样始终为 0,列表和地图的长度相同......所以我可以不是这样:map[i] = list[i],因为它们不匹配。有人可以告诉我如何用列表的内容替换字典的内容吗?拜托拜托!!!

4

2 回答 2

1

简单的 For 循环

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);
于 2013-07-27T03:19:46.620 回答
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;
于 2013-07-27T03:28:10.300 回答