您可以使用Zip
组合,Where
:
var firstReadOfMachineTotals = new[]{ 10, 20, 4000, 554 };
var secondReadOfMachineTotals = new[]{ 10, 40, 4000, 554};
var result = firstReadOfMachineTotals.Zip(secondReadOfMachineTotals, (a,b) => b > a ? b - a : 0)
.Where(x => x > 0)
.OrderByDescending(x => x)
.FirstOrDefault();
Console.WriteLine(result); // output = 20
此方法将默认为0
当所有值都相同。相反,如果你想要这个默认的控制,你也可以这样做:
var firstReadOfMachineTotals = new[]{ 10, 20, 4000, 554 };
var secondReadOfMachineTotals = new[]{ 10, 40, 4000, 554};
var result = firstReadOfMachineTotals.Zip(secondReadOfMachineTotals, (a,b) => b > a ? b - a : 0)
.Where(x => x>0)
.DefaultIfEmpty(int.MinValue) // or whatever default you desire
.Max();
Console.WriteLine(result); // output = 20
你有没有尝试什么吗?它可以使用LINQ FirstOrDefault + null-propagation在单行代码中完成,但对于你来说它将是**无用的**,因为你不会自己学习任何东西。您需要尝试使用简单的循环和ifs来自己完成 - 只需遍历索引并比较两个值即可。 –
如果你在第二个列表中有另一个更高的数字?你将返回他们的总和是什么?或差异列表? –
@OfirWinegarten好的问题,我应该指出,除非另一个代码有问题,那么应该永远不会有两个数字不同。我将编辑该问题。谢谢。 –