C# 如何从列表和键值对列表生成字典
我有一个int的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}
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的输出的匿名类型
。我添加了更多的解释。