毎日のリターンの計算を行う株式分析 (株式) オブジェクトのリスト。これを行うにはペアワイズソリューションが必要だと考えていました:
for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}
LINQは「言語統合クエリ」の略です。
LINQ は使用すべきではなく、割り当てにはほとんど使用できません。LINQ は指定された IEnumerable パラメーターを変更しませんが、新しいパラメーターを作成します。
以下のコメントで示唆されているように、 LINQ を使用して新しい IEnumerable を作成する方法があります。これは遅くなり、読みにくくなります。
LINQ は優れていますが、重要なことは、LINQ を使用しない場合を知ることです。
古き良きfor loop を使用してください。
私はLINQを初めて使いました.stackoverflowのためにそれを使い始めたので、あなたの質問で遊んでみました.これは反対票を集める可能性があることを知っていますが、リストに少なくとも1つの要素がある場合に試してみました.
sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);
ただし、for ループを回避することはベスト プラクティスではないと言わざるを得ません。私の観点からは、LINQ は便利な場所で使用する必要があり、どこでも使用する必要はありません。古き良きループは、維持しやすい場合があります。