Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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_Linq - Fatal编程技术网

C# 用C压缩两个列表

C# 用C压缩两个列表,c#,list,linq,C#,List,Linq,我有两个整数值列表: List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; List<int> list2 = new List<int>() { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; 期望输出 { 12,24,16,56,20,96,24,144,28,200 } Zip方法没有支持索引的重载,您可以使用MoreL

我有两个整数值列表:

List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> list2 = new List<int>() { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
期望输出

{ 12,24,16,56,20,96,24,144,28,200 }
Zip方法没有支持索引的重载,您可以使用MoreLinq库或方法代替支持索引的元素选择器

var result=list1。选择 值,索引=> 索引%2==0?value+list2[索引]:value*list2[索引] 托利斯特先生; result.ForEachConsole.WriteLine; 如果两个列表的长度相同,并且给您一个预期的输出12、24、16、56、20、96、24、144、28、200,那么它将起作用

另一种选择是将两个列表压缩到匿名对象列表中,然后计算它们的总和

var result=list1 .Ziplist2,a,b=>新的{a,b} .Selectvalue,索引=>索引%2==0?value.a+value.b:value.a*value.b 托利斯特先生; 使用。选择而不是压缩

您可以先压缩,然后使用包含索引的Select重载

var result = list1.Zip(list2, (a,b) => (A:a, B:b))
    .Select((x, i) => i % 2 == 0 ? x.A + x.B : x.A * x.B);
注意,我在这里使用的是值元组,因此根据您的C版本,您可能需要使用匿名类,而不是a,b=>new{a=a,b=b}

另一个选项:

int index = 0;
var zipped = list1.Zip(list2, (a, b) => index++ % 2 == 0 ? a + b : a * b);

简明扼要地说,但是它使用了一个副作用,这当然是不好的。

正在运行的代码的当前输出是什么tried@EhsanSajjad那甚至不能编译。@juharr是的,我的错:D@EhsanSajjad按产量计算,,我的意思是所需的输出这比其他答案要好,因为它不能从LINQ表达式中访问list2。为什么不使用Zip的参数resultSelector来执行=>i%2?x、 A+x.B:x.A*x.B零件。这样,您就不必添加Select@HaraldCoppoolse因为Zip没有包含index.Oops的重载,这是我的错。
var result = list1.Zip(list2, (a,b) => (A:a, B:b))
    .Select((x, i) => i % 2 == 0 ? x.A + x.B : x.A * x.B);
int index = 0;
var zipped = list1.Zip(list2, (a, b) => index++ % 2 == 0 ? a + b : a * b);