Heim > Backend-Entwicklung > C++ > Wie finde ich effizient alle Kombinationen von Array-Elementen in C#?

Wie finde ich effizient alle Kombinationen von Array-Elementen in C#?

Linda Hamilton
Freigeben: 2025-01-19 23:07:08
Original
602 Leute haben es durchsucht

How to Efficiently Find All Combinations of Array Elements in C#?

Effizientes Finden aller Kombinationen von C#-Array-Elementen

Beim Arbeiten mit Array-Elementen ist es nützlich, alle möglichen Kombinationen von Elementen zu extrahieren. Diese Aufgabe taucht häufig in Bereichen wie Datenanalyse und kombinatorischer Optimierung auf.

Permutationen und Kombinationen wiederholter Elemente

Angenommen, es gibt ein Array [1, 2, 3, 4]. Um alle Kombinationen der Länge 2 mit wiederholten Elementen zu finden, können Sie die folgende Funktion verwenden:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutationsWithRept(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
Nach dem Login kopieren

Diese Funktion berücksichtigt Kombinationen, die wiederholte Elemente enthalten, wie zum Beispiel [1, 1], [1, 2] usw.

Permutation und Kombination (ausgenommen wiederholte Elemente)

Um doppelte Elemente auszuschließen, verwenden Sie die Funktion GetPermutations:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutations(list, length - 1)
        .SelectMany(t => list.Where(o => !t.Contains(o)), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
Nach dem Login kopieren

Diese Funktion gewährleistet Kombinationen wie [1, 2], [1, 3] und [2, 3], jedoch nicht [1, 1].

K-Kombination mit wiederholten Elementen

Erwägen Sie, Kombinationen der Länge 2 mit wiederholten Elementen zu finden, die ein mehrfaches Vorkommen des Elements zulassen:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombsWithRept<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombsWithRept(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) >= 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
Nach dem Login kopieren

Diese Funktion generiert Kombinationen wie [1, 1], [1, 2] und [2, 2].

K-Kombination (ausgenommen wiederholte Elemente)

Für Kombinationen ohne wiederholte Elemente:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombs<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombs(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
Nach dem Login kopieren

Diese Funktion generiert Kombinationen wie [1, 2], [1, 3] und [2, 3].

Das obige ist der detaillierte Inhalt vonWie finde ich effizient alle Kombinationen von Array-Elementen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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