我有一个KeyValuePair
的int列表和一个自定义对象Function。我还有一个功能ID列表。两个列表都按字母顺序排序。我需要将1列表中的函数Ids与其他列表中的函数Ids相匹配。所以,说KVP列表如下:
1, (Function.name = foo, function.Id = 4)
2, (Function.name = bar, function.Id = 7)
只是ID列表是:
142
154
我需要一本字典:
{4, 142}
{7, 154}
所以从两个列表中混合了函数ID。
我该怎么做?
这是我尝试过的:
Dictionary<int, int> map = new Dictionary<int, int>();
List<KeyValuePair<int, Function>> sorted = SortFunctions();
IEnumerator sortEnum = sorted.GetEnumerator();
IEnumerator dicEnum = FunctionIds.GetEnumerator();
while ((sortEnum.MoveNext()) && (dicEnum.MoveNext()))
{
//Not sure what to do next? Just map[sortEnum.Next()] = dicEnum.Next()?
}
//Also was trying to use zip.. many many errors
List<string> sortedFuncs = sorted.ToList();
Dictionary<int, int> map2 = functionIds.ToDictionary(x => x, x => sortedFuncs.Value.Id[functionIds.IndexOf(x)]);
答案 0 :(得分:0)
您应该能够Zip
与ToDictionary
链接:
List<KeyValuePair<int, Function>> sorted = SortFunctions();
Dictionary<int, int> map2 =
sorted.Zip(FunctionIds, (s, i) => new {key = s.Value.Id, value = i})
.ToDictionary(x => x.key, x => x.value);
<强>解释强>
Zip
枚举两个列表,并创建一个匿名类型,其中包含来自Id
中Value
KeyValuePair
的{{1}}和来自sorted
的整数FunctionIds
。这些值存储在匿名类型的key
和value
属性中。
ToDictionary
然后枚举该集合并使用匿名类型(key
)中的value
和x
创建字典。