Heim > Backend-Entwicklung > C++ > Wie kann LINQ verwendet werden, um alle möglichen Kombinationen aus mehreren Arrays mit dem kartesischen Produkt zu generieren?

Wie kann LINQ verwendet werden, um alle möglichen Kombinationen aus mehreren Arrays mit dem kartesischen Produkt zu generieren?

Patricia Arquette
Freigeben: 2025-01-31 05:31:13
Original
559 Leute haben es durchsucht

How Can LINQ Be Used to Generate All Possible Combinations from Multiple Arrays Using the Cartesian Product?

Verwenden Sie LINQ, um alle möglichen Kombinationen aus mehreren Arrays zu generieren: den kartesischen Produktansatz

Dieser Artikel zeigt, wie LINQ (Language Integrated Query) nutzt, um alle möglichen Kombinationen aus mehreren Arrays mit dem kartesischen Produkt effizient zu generieren. Das gewünschte Ausgangsformat ist eine String -Darstellung nach dem Muster a(i) b(j) c(k) n(p), wobei i, j, k und p Indizes innerhalb der definierten Bereiche für jedes Array sind.

Verständnis des kartesischen Produkts

Das kartesische Produkt ist ein grundlegendes mathematisches Konzept. Die angegebenen Mengen A und B sind das kartesische Produkt A X B die Menge aller geordneten Paare (a, b), wobei 'A' zu A gehört und 'B' gehört. Dies erstreckt sich auf mehrere Sätze.

Zum Beispiel, wenn a = {a, b} und b = {1, 2}, dann a x b = {(a, 1), (a, 2), (b, 1), (b, 2)}.

linq Implementierung

Der folgende Linq -Code generiert die gewünschten Kombinationen:

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

// Helper function (implementation below)
public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(params IEnumerable<IEnumerable<T>>[] sequences) { ... } 
Nach dem Login kopieren

Dieser Code verwendet eine CartesianProduct -Helferfunktion (unten detailliert), um das kartesische Produkt von Sequenzen zu berechnen, die aus arr2 erzeugt wurden. Jedes Element in arr2 definiert den Bereich der Indizes für ein entsprechendes Element in arr1. Die Zip -Methode kombiniert dann die Ergebnisse mit arr1, um die endgültigen Ausgangszeichenfolge zu erstellen.

Die CartesianProduct Helferfunktion

Hier ist eine mögliche Implementierung der CartesianProduct -Funktion:

public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(params IEnumerable<IEnumerable<T>>[] sequences)
{
    if (sequences == null)
        throw new ArgumentNullException(nameof(sequences));

    IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };

    return sequences.Aggregate(
        emptyProduct,
        (accumulator, sequence) =>
            from acc in accumulator
            from item in sequence
            select acc.Concat(new[] { item })
    );
}
Nach dem Login kopieren

Diese Funktion berät das kartesische Produkt einer willkürlichen Anzahl von Eingangssequenzen rekursiv.

Beispielausgabe

Der Code erzeugt bei der Ausführung die folgende Ausgabe und demonstriert alle möglichen Kombinationen:

<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>
Nach dem Login kopieren

Dies zeigt effektiv die Leistung von Linq, um alle möglichen Kombinationen aus mehreren Arrays präzise und elegant zu erzeugen.

Das obige ist der detaillierte Inhalt vonWie kann LINQ verwendet werden, um alle möglichen Kombinationen aus mehreren Arrays mit dem kartesischen Produkt zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage