我有2个名单:
List<int> listOne
说[1,2,3,4] List<int> listTwo
说[111,222,333,444] 现在我想使用上面的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呢?
答案 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();