給定 a List<T>where Tis f loat/decimal/double,使用 LINQ 計算percent change所有值的。
這是PercentChange(不error檢查例如 if ais zero)的定義
static double PercentChange(double a, double b)
{
double result = 0;
result = (b - a) / a;
return result;
}
var list = new List<double>();
list.Add(2.0);
list.Add(2.5);
list.Add(2.0);
list.Add(1.75);
然后 usingLINQ將回傳一個新的 List 少一個元素,其值:
[.25, -.20, -.125]
我知道我可以loop。我想要一個functional使用LINQ.
uj5u.com熱心網友回復:
我不確定我是否會發現這種方法比回圈更具可讀性,但 LINQ 方法是:
list.Zip(list.Skip(1), PercentChange)
輸出:
[.25, -.2, -.125]
這個想法是獲取第一個串列,將其與自身“壓縮”,但跳過第一個元素(y下一個元素也是如此)并在其上應用您的PercentChange函式。 Zip將自動將生成的序列截斷為較小序列的大小,因此您最終得到三個元素。
uj5u.com熱心網友回復:
有幾種解決方案,我更喜歡以下一種,將LINQs Enumerable.Zip與LINQS Enumerable.Skip結合使用
var result = list.Zip(list.Skip(1), (a, b) => (b - a) / a);
Console.WriteLine(string.Join(", ", result));
哪個列印
0.25,-0.2,-0.125
這個非常緊湊的解決方案允許計算您的串列,如下所示:
a: 2.0 2.5 2.0 1.75
b: 2.5 2.0 1.75
res: 0.25 -0.2 -0.125
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/463243.html
上一篇:將此SQL查詢轉換為LINQ
下一篇:在ASP.NETCore中使用EntityFramworkCore以一對多的關系從三個相關表中加載資料導致某些資料不顯示
