Lista obiektów Equity Analytics (akcji) wykonujących obliczenia dla dziennych zwrotów. Myślał, że musi to być rozwiązanie parami:
for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}
Odpowiedzi:
0 dla odpowiedzi № 1Jestem nowy w LINQ, zacząłem go używać z powodustackoverflow, więc próbowałem zagrać z twoim pytaniem i wiem, że może to przyciągnąć downvotes, ale próbowałem i robi to, czego chcesz, w przypadku gdy jest co najmniej jeden element na liście.
sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);
Ale muszę powiedzieć, że unikanie pętli nie jest najlepszą praktyką, z mojego punktu widzenia LINQ powinno być używane tam, gdzie jest wygodne i nie wszędzie. Dobre stare pętle są czasami łatwiejsze do utrzymania.
2 dla odpowiedzi nr 2
LINQ oznacza: "Zintegrowany język Pytanie".
LINQ nie powinno być używane i prawie nie może być użyte do przypisania, LINQ nie zmienia podanego parametru IEnumerable, ale tworzy nowy.
Jak sugeruje w komentarzu poniżej, istnieje sposób stwórz nowy IEnumerable z LINQ będzie wolniej i będzie mniej czytelny.
Chociaż LINQ jest miłe, ważne jest, aby wiedzieć, kiedy go nie używać.
Po prostu korzystaj ze starego dobrego dla pętli.