您可以使用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好的問題,我應該指出,除非另一個代碼有問題,那麼應該永遠不會有兩個數字不同。我將編輯該問題。謝謝。 –