Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中如何在某些条件下匹配两个列表_C#_List_Match - Fatal编程技术网

C# 在C语言中如何在某些条件下匹配两个列表

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的相同索引。

我有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的作用,但这里有一个查询返回您期望的数据:

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 ]
]