LINQ C#使用2个列表计算List值

时间:2017-08-14 10:58:55

标签: c# linq

我有2个名单:

  1. List<int> listOne说[1,2,3,4]
  2. List<int> listTwo说[111,222,333,444]
  3. 现在我想使用上面的2个列表制作结果List<int>,进行一些计算,例如[1*100/111, 2*100/222 ,... listOne[i]*100/listTwo[i].,...]

    我尝试过:

    resultantList = listOne.Select((s, i) => new { s * 100 / listTwo[i] }).ToList();
    
    resultantList = listOne.Select((s, i) => s * 100 / listTwo[i]).ToList();
    

    但这并没有编译。我应该如何构建LINQ呢?

4 个答案:

答案 0 :(得分:5)

您可以使用Linq Zip,例如:

var results = listOne.Zip(listTwo, 
    (one, two) => one*100 / (decimal)two);

注意:强制转换为十进制非常重要,否则除法将产生整数输出(在测试数据中始终为零)

答案 1 :(得分:2)

您可以使用Zip

List<int> result = listOne.Zip(listTwo, (i1, i2) => i1 * 100 / i2).ToList();

但由于整数除法,我希望所有值都为0,因为即使乘以100,除法结果也小于1.所以也许你想使用decimal

List<decimal> result = listOne.Zip(listTwo, (i1, i2) => decimal.Divide(i1 * 100, i2)).ToList();

答案 2 :(得分:1)

var resultList = new List<int>();
for(var i = 0; i < listOne.Count; i++)
{
  resultList.Add((listOne[i] * 100) / (decimal)listTwo[i]);
}

答案 3 :(得分:0)

操作数学运算使用select语句完成并存储在结果列表中。结果将是十进制数,因此输出列表是十进制列表。输入被类型化为十进制以执行操作

List<decimal> result = listOne.Select((x,i) => (decimal)x*100 / (decimal)listTwo[i]).ToList();