C# 如何从列表和键值对列表生成字典

C# 如何从列表和键值对列表生成字典,c#,list,dictionary,C#,List,Dictionary,我有一个int的KeyValuePair列表和一个自定义对象Function。我还有一个函数ID列表。两个列表都按字母顺序排序。我需要将1列表中的函数ID与另一个列表中的函数ID进行匹配。因此,假设KVP列表如下所示: 1, (Function.name = foo, function.Id = 4) 2, (Function.name = bar, function.Id = 7) 仅ID的列表如下所示: 142 154 我需要一本关于下列内容的词典: {4, 142} {7, 154}

我有一个int的
KeyValuePair
列表和一个自定义对象Function。我还有一个函数ID列表。两个列表都按字母顺序排序。我需要将1列表中的函数ID与另一个列表中的函数ID进行匹配。因此,假设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)]);
Dictionary map=newdictionary();
列表排序=排序函数();
IEnumerator sortEnum=sorted.GetEnumerator();
IEnumerator dicEnum=FunctionIds.GetEnumerator();
而((sortEnum.MoveNext())&&(dicEnum.MoveNext())
{
//不确定下一步要做什么?只需映射[sortEnum.next()]=dicEnum.next()?
}
//我也在尝试使用zip。。许多错误
List sortedFuncs=sorted.ToList();
Dictionary map2=functionIds.ToDictionary(x=>x,x=>sortedFuncs.Value.Id[functionIds.IndexOf(x)];

您应该能够将
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);
List sorted=SortFunctions();
字典地图2=
sorted.Zip(functionId,(s,i)=>new{key=s.Value.Id,Value=i})
.ToDictionary(x=>x.key,x=>x.value);
说明:

Zip
枚举这两个列表,并创建一个匿名类型,该类型由
中排序的
KeyValuePair
中的
Id
函数Id中的整数组成。这些值存储在匿名类型的
属性中


ToDictionary
然后枚举该集合,并使用匿名类型(
x
)中的
键和
值创建字典

为什么
{“Foo”,4}
142
匹配?这两个集合之间的关系并不完全清楚。逻辑是否只是通过索引链接,因此
中第3个位置的KVP已排序
FunctionID
中第3个位置的FunctionID匹配?您能用我的变量再次这样做吗?你能用我的变量再做一次吗?我不知道什么会去哪里。。所以使用我的FunctionID和SortedFunc。谢谢@jcam77我认为
sorted
functionId
是您的变量。哦,天哪,这有点尴尬。。我错过了第一个排序,并认为它使用了functionid和x。非常感谢您的解决方案。我理解第一部分((s,I)=>new{key=s.Value.Id,Value=I}),至少我认为我理解(s是sorted中的当前实例,i是FunctionID中的当前实例。我在最后一行有点困惑。您是否将压缩排序设置为字典,其中x.key和x.value有什么值?您在哪里分配x?我猜是什么?我不熟悉语法。
x
Zip的输出的匿名类型
。我添加了更多的解释。