LINQ Version der Berechnung Summe Produkt von benachbarten Elementen in einem Array

7

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 ).

%Vor%

Wie kann ich das (elegant) mit LINQ machen?

    
brakeroo 14.12.2016, 14:40
quelle

4 Antworten

8

Sie können Zip die 2 Subarrays mit Multiplikationen und dann Sum sie, genau wie Sie die Anfrage erklären würden:

%Vor%

Wenn Sie MoreLinq referenzierten Sie eine sauberere Lösung durch Falten jede Charge von 2 Elemente in ihr Produkt haben kann und mit Sum :

%Vor%

oder eine allgemeinere Lösung unter Verwendung Aggregate anstelle von Fold :

%Vor%     
Tamir Vered 14.12.2016 14:44
quelle
8
%Vor%

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]

    
mybirthname 14.12.2016 14:55
quelle
6

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.

%Vor%

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.

    
juharr 14.12.2016 14:50
quelle
1

Ich gehe für die kurze und verwirrende Version:

%Vor%     
Slai 15.12.2016 02:19
quelle

Tags und Links