Geben Sie zwei Array, Array1 und Array2 an. Zum Beispiel gegeben:
array1: {a, b, c}
Dieser Prozess erfordert, dass wir das Fragment der Sequenz dieser beiden Arrays erhalten. LINQ bietet eine direkte Möglichkeit, diese Descartes zu generieren:
<code> a1 b1 c1 a1 b1 c2 a1 b1 c3 a1 b1 c4 a1 b2 c1 a1 b2 c2 a1 b2 c3 a1 b2 c4 a2 b1 c1 a2 b1 c2 a2 b1 c3 a2 b1 c4 a2 b2 c1 a2 b2 c2 a2 b2 c3 a2 b2 c4 a3 b1 c1 a3 b1 c2 a3 b1 c3 a3 b1 c4 a3 b2 c1 a3 b2 c2 a3 b2 c3 a3 b2 c4 (最后一行)</code>
Diese Methode erhält die Sequenz der Sequenz und verwendet den Aggregatoperator, um die Descartes -Akkumulation zu akkumulieren. Es beginnt mit einer leeren Sequenz als Cumulator und kombiniert sie wiederholt mit jeder Sequenz in der Eingangssequenz. Für jede Kombination komprimiert es die Elemente im Cumulator und die Elemente in der Stromsequenz, um die Hydrochllar -Akkumulation zu erzeugen.
komprimierte Datenstatic IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) { IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; return sequences.Aggregate( emptyProduct, (accumulator, sequence) => from accseq in accumulator from item in sequence select accseq.Concat(new[] { item }) ); }
Sobald wir die Akkumulation von Descartes haben, können wir die Elemente im ersten Array und das entsprechende Element im zweiten Array des zweiten Arrays komprimieren:
Mit cartesianProduct -Methode können wir die Descartes mehrerer Sequenzen leicht erzeugen. Wir erstellen eine Sequenz einer Sequenz, indem wir für jedes Element im zweiten Array einen Ganzzahlbereich erzeugen, und dann diese Descartes -Bereich mit dem ersten Array komprimieren, um die erforderliche Kombination zu erstellen.
Schließlich können wir die Sequenz der Sequenz der Sequenz durchqueren und jede Zeile drucken:
var arr1 = new[] { "a", "b", "c" }; var arr2 = new[] { 3, 2, 4 }; var result = from cpLine in CartesianProduct( from count in arr2 select Enumerable.Range(1, count)) select cpLine.Zip(arr1, (x1, x2) => x2 + x1);
Dieser Code generiert eine Kombination als Zeichenfolge und druckt sie in die Konsole.
Das obige ist der detaillierte Inhalt vonWie generiere ich alle möglichen Kombinationen von Array -Elementen mit dem kartesischen Produkt von Linq?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!