C# 在C语言中如何在某些条件下匹配两个列表
我有3个类似的列表:C# 在C语言中如何在某些条件下匹配两个列表,c#,list,match,C#,List,Match,我有3个类似的列表: listA = {1, 1, 1, 2, 2, 2} listB = {4, 5, 6, 4, 5, 6} listC = {10, 20, 30, 40, 50, 60} 我想匹配listA和listB元素。因此,如果listA元素与listB的相同元素匹配,我想将它们添加到另一个列表listQ中。比如, listQ = {{10, 40}, {20, 50}, {30, 60}} listA的值1和2与listB的值4匹配。所以我采用了listC的相同索引。
listA = {1, 1, 1, 2, 2, 2}
listB = {4, 5, 6, 4, 5, 6}
listC = {10, 20, 30, 40, 50, 60}
我想匹配listA和listB元素。因此,如果listA元素与listB的相同元素匹配,我想将它们添加到另一个列表listQ中。比如,
listQ = {{10, 40}, {20, 50}, {30, 60}}
listA的值1和2与listB的值4匹配。所以我采用了listC的相同索引。
我怎么办
谢谢
编辑:
由于反响很大,我用图片附上了新的样品。我希望这会有所帮助:
我仍然不理解listA的作用,但这里有一个查询返回您期望的数据:
var listQ = listB.Select((b, i) => new { b, i })
.GroupBy(bx => bx.b)
.Select(g => g.Join(listC.Select((c, i) => new { c, i }),
bx => bx.i,
cx => cx.i,
(bx, cx) => cx.c).ToList()).ToList();
它根据listB项的值对其进行分组,并保留这些值的索引。这为您的第一个样本提供了三个组:
Key | Items in group (first property is item value, second is item index)
4 | {4,0}, {4,3}
5 | {5,1}, {5,4}
6 | {6,2}, {6,5}
然后,我通过在listC中具有值的索引来连接这些组。即,对于每个组,我从listC中选择与组中listB项具有相同索引的项
{4,0} -> {10,0}, {4,3} -> {40,3}
{5,1} -> {20,1}, {5,4} -> {50,4}
{6,2} -> {30,2}, {6,5} -> {60,5}
和最后一步-I项目连接的项目并仅选择项目值:
[
[ 10, 40 ]
[ 20, 50 ]
[ 30, 60 ]
]
用你的第二个例子
var listA = new List<int> { 1, 1, 1, 2, 2, 3, 4 };
var listB = new List<int> { 4, 5, 6, 4, 4, 5, 5 };
var listC = new List<int> { 10, 20, 30, 40, 50, 60, 70 };
匹配是随机的,或者有一些规则?我不明白匹配listA和listB将如何呈现listQ。我不明白任务。listA的1是1,listA的2也是1,这个匹配列表的4是怎样的,它是50?在我看来,你只是把listC中对应于listB中匹配值的值分组:listB[0]和listB[3]都是4,所以我们得到{listC[0],listC[3]}={10,40}。listA在这里似乎没有任何参与,所以实际上listA在读心术中根本没有使用+1;谢谢你的回答和关注。但是我认为这个代码块有一个错误。错误是:@team16sah如果需要列表,只需在join之后添加ToList调用:.Selectg=>g.join….ToList。ToList@team16sah将连接结果选择更改为bx,cx=>cx。这将为您提供匿名类型列表,其中既包含listC的值,也包含它的index@SergeyBerezovskiy谢谢。祝您有个美好的一天。
[
[ 10, 40, 50 ],
[ 20, 60, 70 ],
[ 30 ]
]