如何在C#中按顺序将两个等长列表的对应元素相乘?
对应元素相乘的实现方案
你可以利用C# LINQ中的Zip方法来完成两个列表对应位置元素的配对相乘,该方法会将两个序列中索引相同的元素进行组合,完全匹配你的需求。
代码实现
假设你的实体类定义大致如下:
// tests表对应的实体 public class TestEntity { public int Id { get; set; } public decimal FirstYear { get; set; } public decimal SecondYear { get; set; } public decimal ThirdYear { get; set; } } // tests2表对应的实体 public class Test2Entity { public int Id { get; set; } public decimal Price { get; set; } }
根据你的需求,将test中每个元素的年份属性依次与test2中对应位置的Price相乘,可以这样写:
var test = _db.tests.Where(x => x.Id == id).ToList(); var test2 = _db.tests2.Where(y => y.Id == id).ToList(); // 提取test中所有年份值为一个扁平序列 var yearValues = test.SelectMany(t => new[] { t.FirstYear, t.SecondYear, t.ThirdYear }); // 提取test2中所有Price值 var priceValues = test2.Select(t2 => t2.Price); // 对应位置相乘,得到结果列表 var result = yearValues.Zip(priceValues, (year, price) => year * price).ToList();
说明
SelectMany用于将每个TestEntity中的三个年份属性展开为单个数值序列,确保年份值的顺序与test2中Price的顺序一一对应。Zip方法会遍历两个序列,将相同索引位置的year和price传入委托进行相乘操作,最终返回包含所有乘积的新列表。- 由于你明确两个列表长度一致,不需要额外处理长度不匹配的情况。
内容的提问来源于stack exchange,提问作者jiyanyasli
相关产品推荐
相关产品推荐

