Laden...

Alle Kombinationen einer Liste ausgeben - Permutation (?)

Erstellt von reloop vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.799 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 9 Jahren
Alle Kombinationen einer Liste ausgeben - Permutation (?)

Hallo liebe Community,

ich weiß nicht, ob meine Themenbezeichnung treffen ist, jedoch kommt sie meiner Beschreibung des möglichen Szenarios am nächsten.

Es geht um folgendes:

Für ein Spiel das ich aus Hobbyzwecken programmiere, benötige ich eine Funktion, die mir anhand einer beliebigen Anzahl Wörter folgendes Muster ausgibt:

Bsp:

meineFunktion(['Apfel', 'Birne']);

Ausgabe:

Apfel - 0 Birne - 0
Apfel - 0 Birne - 1
Apfel - 0 Birne - 2
Apfel - 1 Birne - 1
Apfel - 1 Birne - 2
Apfel - 2 Birne - 2

Bei 3 Wörtern wäre die Ausgabe wie folgt:

meineFunktion(['Apfel','Birne','Tomate']);

Apfel - 0 Birne - 0 Tomate - 0
Apfel - 0 Birne - 0 Tomate - 1
Apfel - 0 Birne - 0 Tomate - 2
Apfel - 0 Birne - 1 Tomate - 1
Apfel - 0 Birne - 1 Tomate - 2
Apfel - 0 Birne - 2 Tomate - 2
Apfel - 1 Birne - 1 Tomate - 1
Apfel - 1 Birne - 1 Tomate - 2
Apfel - 1 Birne - 2 Tomate - 2
Apfel - 2 Birne - 2 Tomate - 2

Leider stehe ich total auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht mehr... Danke für eure Hilfe!

Liebe Grüße,
reloop

G
47 Beiträge seit 2011
vor 9 Jahren

Ist jetzt nicht schön, sollte aber funktionieren.
Das Zauberwort dabei ist Rekursion.


        static List<string> ausgabestring(string prefix, int startindex, List<string> obst)
        {
            List<string> weniger_obst=new List<string>(obst);

            List<string> output=new List<string>();
            if (obst.Count > 0)
            {
                weniger_obst.RemoveAt(0);
                for (int i = startindex; i <= 2; i++)
                {
                    output.AddRange(ausgabestring(prefix + " " + obst[0] + " " + i, i, weniger_obst));
                }
            }
            else 
                output.Add(prefix);
            return output;
        }

Gruß Gwinn

16.807 Beiträge seit 2008
vor 9 Jahren

Um den Baum sichtbarer zu machen: einfach eine rekursive Methode mit einer einzigen For-Schleife und dem prefix als Übergabe.
Den fertigen Code werd ich Dir da aber nicht machen, sorry 😉