Comment puis-je obtenir la matrice de résultat à l'aide de LINQ?
for (int i = 0; i < items.Length; i++)
{
if (i == 0)
result[i] = max - items[i];
else
result[i] = result[i - 1] - items[i];
}
3 Réponses :
Voici une instruction LINQ qui reproduira ce que vous avez fait dans vos commentaires
@ user3688343 Ce n'est pas un bon moyen de le faire. Lorsqu'un simple balayage via un iEnumerable code> suffit, vous numérisez dans la même liste de manière imbriquée, augmentant ainsi la complexité d'exécution par une commande et aggravant la lisibilité du code.
@ user3688343 vikhram est correct. Mais Vikhram n'a pas lu la question ... Cela a déclaré que vous vouliez une réponse de Linq et c'est ce que je vous ai donné ... alors arrêtez-vous sans lire M. Vikhram
Malheureusement, LINQ ne fournit pas ce type d'agrégation. Idéalement, vous souhaitez écrire la fonction agrégée par vous-même pour cela, en utilisant des boucles. Une solution pas si propre à l'aide de Linq serait aussi ci-dessous
var results = items.AggregateExtn(max, (agg, curr) => agg - curr);
LINQ n'est pas la bonne chose à utiliser dans cette situation. Malheureusement, je ne sais pas comment faire un agrégat ou comment cela fonctionnerait.
Vous pouvez utiliser ce qui suit.
495 488 479 478
sûrement la meilleure réponse xD
Le seul inconvénient est les effets secondaires qui veulent idéalement éviter avec Linq.
@JuHarr qui est?
@Neil, il change la variable max code>. Donc, si vous deviez itérer résultat code> deux fois, vous obtiendriez des résultats différents, sauf si vous réinitialisez max code>.
@juharr Merci d'avoir apporté ça. Mais, s'il a été converti en une matrice (comme je suis resté dans des commentaires) ou une liste, les résultats pourraient être conservés?
@juhararr ahh qui a du sens. vous avez raison. Mais vous pouvez simplement créer une nouvelle variable TEMP à la volée et stockez-la pour éviter cela.
@Neil qui résoudrait la variable code> modification variable, mais itération résultat code> aurait toujours le même problème que si vous réinitialisez la variable TEMP à max. La meilleure façon d'éviter que cela consiste à matérialiser la requête immédiatement via tolist code> ou toarray code>.
@Anuviswan Oui, je me matérialiserai certainement de toute requête LINQ avec des effets secondaires immédiatement pour cette raison même, mais vous perdez la charge paresseuse. C'est juste une question de choisir les offices que vous êtes prêt à vivre avec.
Ceci est une description de la tâche. Pouvez-vous s'il vous plaît décrire le problème que vous avez résolu cette tâche? Astuce: Vous recherchez
agrégat code>Qu'est-ce que tu as essayé jusque-là ?
Ce n'est pas une bonne question. S'il vous plaît expliquer ce que vous essayez de faire et quel est le problème avec votre code
Pourquoi ne pas juste faire cela avec une boucle simple?
Comment cette tâche est-elle une "somme"?
Vous pouvez simplifier cette boucle à juste
résultat [i] = max - = éléments [i]; code> si cela ne vous dérange pas de mutermax code>. Si vous devez quittermax code> seul, il suffit d'assigner à une variable temporelle avant la boucle et à l'utiliser à la place.