【问题标题】:LINQ C# Calculating a List value using 2 listsLINQ C# 使用 2 个列表计算列表值
【发布时间】:2018-01-22 04:52:13
【问题描述】:

我有 2 个列表:

  1. List<int> listOne 说 [1,2,3,4]
  2. 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?

【问题讨论】:

  • 你的第二个应该编译得很好。 Zip(如 DavidG 的回答)更好,但您的第二个选项应该工作得很好。你有什么编译错误?
  • 这里有一个zip 示例供您提问。link
  • 是的,它正在编译,现在耐心地再次检查。非常感谢,我记得它显示了像“匿名成员声明器...”这样的错误,实际上这涉及要在仪表板上显示的实时数据。最好的方法是什么?我在这里看到很多答案。 LINQ 和我的计算\执行速度是否更快。该列表是需要根据后端接收到的数据在页面上不断更改的值之一(在对象内部)。请指教。

标签: c# linq


【解决方案1】:

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

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

【讨论】:

  • 请解释一下答案。否则,这是一篇低质量的帖子,可能会被删除。
  • 答案一目了然。
【解决方案2】:
var resultList = new List<int>();
for(var i = 0; i < listOne.Count; i++)
{
  resultList.Add((listOne[i] * 100) / (decimal)listTwo[i]);
}

【讨论】:

  • 这不是LINQ
【解决方案3】:

可以使用LinqZip,例如:

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

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

【讨论】:

    【解决方案4】:

    您可以使用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2019-09-13
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多