/ / Converter loop para LINQ - c #, linq, list

Converter loop para LINQ - c #, linq, list

Uma lista de objetos do Equity Analytics (estoques) fazendo um cálculo para retornos diários. Estava pensando que deveria haver uma solução de pares para fazer isso:

for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}

Respostas:

0 para resposta № 1

Eu sou novo no LINQ, eu comecei a usá-lo por causa destackoverflow, então eu tentei jogar com a sua pergunta, e sei que isso pode atrair downvotes, mas eu tentei e ele faz o que você quer no caso de haver pelo menos um elemento na lista.

sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);

Mas devo dizer que evitar loops não é a melhor prática. Do meu ponto de vista, o LINQ deve ser usado onde for conveniente e não em todos os lugares. Os bons e velhos circuitos são às vezes mais fáceis de manter.


2 para resposta № 2

LINQ apoia: "Linguagem Integrada Inquerir".

O LINQ não deve ser usado e quase não pode ser usado para atribuições, o LINQ não altera o parâmetro IEnumerable fornecido, mas cria um novo.

Como sugerido em um comentário abaixo, há uma maneira de criar um novo IEnumerable com o LINQ, será mais lento e muito menos legível.

Embora o LINQ seja bom, uma coisa importante é saber quando não usá-lo.

Apenas use o bom e velho para loop.