在C#中压缩两个列表

我有两个Integer值的列表。

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 };

我想把上面的两个列表压缩,使偶数索引中的元素由列表1和列表2中相应的元素之和得到,奇数元素由它们相乘得到,我试过这样做,但没有成功。

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

但没有成功:

{ 12,24,16,56,20,96,24,144,28,200 }

解决方案:

Zip 方法没有支持索引的重载,你可以使用 MoreLinq 图书馆或 Select 方法来代替(使用元素选择器,支持索引)

var result = list1.Select(
        (value, index) =>
            index % 2 == 0 ? value + list2[index] : value * list2[index])
    .ToList();
result.ForEach(Console.WriteLine);

如果两个列表的长度相同,并给你一个预期的输出,它就会工作。12, 24, 16, 56, 20, 96, 24, 144, 28, 200

另一个选择是 Zip 把两个列表都变成匿名对象列表,然后计算它们的总和。

var result = list1
    .Zip(list2, (a, b) => new { a, b })
    .Select((value, index) => index % 2 == 0 ? value.a + value.b : value.a * value.b)
    .ToList();

给TA打赏
共{{data.count}}人
人已打赏
未分类

倩女幽魂推送通知在取消注册devicetoken后无法开启。

2022-9-9 2:12:21

未分类

在Android Studio中启动一个新的谷歌地图活动时出错。

2022-9-9 2:23:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索