2017-08-14 28 views
2

列表值我有2所列出:LINQ C#计算使用2所列出

  1. List<int> listOne说[1,2,3,4]
  2. List<int> listTwo说[111222333444]

现在我想使用上面的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?

+3

你的第二个应该编译罚款。 Zip(如DavidG的回答)更好,但你的第二个选择应该工作得很好。你有什么编译错误? – Chris

+1

这是你的问题的'zip'示例。[link](https://stackoverflow.com/a/5122785/2332844) – Badiparmagi

+0

是的,它的编译,只是耐心地再次检查。谢谢很多 我记得它显示错误,如 '匿名成员声明符...' 实际上,这涉及到要在仪表板上显示的实时数据。 哪种方法最好?我在这里看到很多答案。 LINQ和我的计算\执行得更快。 此列表是根据收到的后端数据需要在页面上保持更改的值(在对象内)。请指教。 – jAntoni

回答

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(); 
5

您可以使用LINQ Zip,例如:

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

注:中投为十进制是很重要的,否则该司将产生整数输出(这始终是零您的测试数据)

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

这不是'LINQ'。 – Badiparmagi

0

操作数学运算使用select语句来完成的,并存储在最终list.The结果将是一个十进制数,因此输出列表是一个十进制list.The输入类型强制转换为十进制来执行该操作

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

+0

请解释答案。没有它,这是一个低质量的职位,可能会被删除。 – gyan

+0

答案是自我解释。 – TripVik