Permutationen in C# eine Generische Lösung gesucht?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Bei deinem Versuch deklarierst du den generischen Typ T gar nicht. An sich brauchst du auch nur einen generischen Parameter.

static void printArr<T>(T[] a, int n)
{
  // ...
}

static void heapPermutation<T>(T[] a, int size, int n)
{
  // ...
}

Die temp-Variablen bekommen zudem den Datentyp T.


CodenLernen 
Fragesteller
 11.11.2021, 18:14

Wenn ich nun aber einen string array Permutieren will ist das auch kein Problem?

0
regex9  11.11.2021, 18:17
@CodenLernen

Nein. Du hast doch nur einen Container mit Elementen, die du hin- und herschiebst. Ob die Elemente nun Zeichenketten, Zahlen oder Elefanten entsprechen, ist nicht relevant. Nur die Ausgaben auf der Konsolen können unlesbar werden, wenn der Parameter T einen Datentyp vertritt, der die ToString-Methode nicht für eine menschenlesbare Ausgabe überschreibt.

1
CodenLernen 
Fragesteller
 11.11.2021, 18:43
@regex9

Und wie erzeuge ich nun die passende liste dafür?

int[] a = { 1, 2, 3 };

Wie mache ich das korrekt? Weil wenn ich die Liste so lasse kommt ein Fehler das a nicht impliziert in int konvertierbar ist

0
regex9  11.11.2021, 18:46
@CodenLernen

Du hast meine obige Antwort vermutlich nicht vollständig gelesen bzw. nicht alle Änderungen vorgenommen, die ich vorgegeben habe.

0
regex9  11.11.2021, 18:53
@CodenLernen

Was hast du Schritt für Schritt an deinem obigen Anfangscode geändert?

0
CodenLernen 
Fragesteller
 11.11.2021, 18:56
@regex9
 class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[] { 1, 2, 3 };
            heapPermutation (a, a.Length, a.Length);

        }


        static void heapPermutation<t>(t[] a, int size, int n)
        {
            // if size becomes 1 then prints the obtained
            // permutation
            if (size == 1)
                printArr(a, n);

            for (int i = 0; i < size; i++)
            {
                heapPermutation(a, size - 1, n);

                // if size is odd, swap 0th i.e (first) and
                // (size-1)th i.e (last) element
                if (size % 2 == 1)
                {
                    int temp = a[0];
                    a[0] = a[size - 1];
                    a[size - 1] = temp;
                }

                // If size is even, swap ith and
                // (size-1)th i.e (last) element
                else
                {
                    int temp = a[i];
                    a[i] = a[size - 1];
                    a[size - 1] = temp;
                }
            }
        }

        // Driver code
       
        static void printArr<t>(t[] a, int n)
        {
            for (int i = 0; i < n; i++)
                Console.Write(a[i] + " ");
            Console.WriteLine();
        }
0
CodenLernen 
Fragesteller
 11.11.2021, 19:00
@regex9

Ah das habe ich übersehen, Vielen vielen dank!!! Es funktioniert =).

0