Ich suche nach einer Möglichkeit, in LINQ Folgendes zu tun (es ist im Grunde ein Summenprodukt, wo das gleiche Array beide Operanden des Produkts bei n
und n + 1
Indizes enthält, offensichtlich ist die Array-Länge immer 2 * n
).
Wie kann ich das (elegant) mit LINQ machen?
Sie können Zip
die 2 Subarrays mit Multiplikationen und dann Sum
sie, genau wie Sie die Anfrage erklären würden:
Wenn Sie MoreLinq
referenzierten Sie eine sauberere Lösung durch Falten jede Charge von 2 Elemente in ihr Produkt haben kann und mit Sum
:
oder eine allgemeinere Lösung unter Verwendung Aggregate
anstelle von Fold
:
Das sollte genug sein. Hier ein Beispiel in dotNetFiddle .
Dieser Code ist ziemlich genau der Spiegel:
%Vor% Das macht dasselbe wie Ihre Schleife, aber anstelle von +2
Ihrer Schleife haben Sie den Schritt +1
und die Schleifendauer ArrayItems/2
und Sie bilden die Summe der Elemente aus input[i*2] * input[i*2 + 1]
Sie können die Überladung von Select
verwenden, die den Index enthält, dann die Gruppe auf dem Index geteilt durch 2. Aggregieren Sie die Werte, indem Sie sie multiplizieren, und schließlich eine Summe.
Dies funktioniert auch für allgemeinere Fälle, in denen Sie das Produkt von n aufeinanderfolgenden Zahlen summieren möchten, indem Sie durch n statt durch 2 dividieren.