如何从列表和键值对列表中创建字典

时间:2014-07-17 16:36:09

标签: c# list dictionary

我有一个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)]);

1 个答案:

答案 0 :(得分:0)

您应该能够ZipToDictionary链接:

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枚举两个列表,并创建一个匿名类型,其中包含来自IdValue KeyValuePair的{​​{1}}和来自sorted的整数FunctionIds。这些值存储在匿名类型的keyvalue属性中。

ToDictionary然后枚举该集合并使用匿名类型(key)中的valuex创建字典。

相关问题