Feedback

C# - Zweidimensionales Array als "Tabelle" darstellen

Veröffentlicht von am 16.08.2013
(0 Bewertungen)
In manchen Fällen, ist es praktisch, wenn man ein Zweidimensionales Array auch als Zweidimensional darstellen kann. Diese Erweiterungsmethode erfüllt diesen Zweck. Nachfolgend ein Beispielcode zur Verwendung:
            int[,] a = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
Console.WriteLine(a.DrawArray2(true));
File.WriteAllText("C:\\test12346784567235632.txt", a.DrawArray2(false));
Console.ReadKey();


Heraus kommt folgendes:
http://code-13.net/Download/Bilder/drawarray2d.png
        /// <summary>
        /// Erstelt eine Zweidimensionale Darstellung eines Zweidimensionalen Array.
        /// </summary>
        /// <typeparam name="T">Der Typ von dem die Elemente in dem Array sind.</typeparam>
        /// <param name="array">Das Array, welches formatiert werden soll.</param>
        /// <param name="console"><c>True</c>, wenn Rahmenelemente verwendet werden sollen. Diese Funktionieren auch in der Konsole. Andernfalls <c>False</c>.</param>
        /// <returns>Eine Zeichenfolge, welche eine Tabellenartige Struktur mit den Elementen von <paramref name="array"/> darstellt.</returns>
        public static string DrawArray2<T>(this T[,] array, bool console)
        {
            string brackets = console ? "┌└│┐┘│" : "⎛⎝⎜⎞⎠⎟";//OL - UL - ML - OR - UR - MR
            StringBuilder sb = new StringBuilder();
            int dx = array.GetLength(0);//Dimensionen ermitteln
            int dy = array.GetLength(1);
            for (int x = 0; x < dx; ++x)
            {
                int len = 0;
                for (int i = 0; i < dy; ++i)
                    len = Math.Max(len, array[x, i].ToString().Length);//Maximale Länge eines Elements in der aktuellen Spalte ermitteln.
                ++len;//Trenendes Leerzeichen

                if (x == 0)//Öffnende Klammer hinzufügen
                    sb.Append(brackets[0]);
                else if (x == dx - 1)
                    sb.Append(brackets[1]);
                else
                    sb.Append(brackets[2]);

                sb.Append(" ");//Leerzeichen als Trennung zur Klammer einfügen

                for (int y = 0; y < dy; ++y)
                {
                    sb.Append(array[x, y].ToString().PadRight(len));
                }

                if (x == 0)//Schließende Klammer hinzufügen
                    sb.Append(brackets[3]);
                else if (x == dx - 1)
                    sb.Append(brackets[4]);
                else
                    sb.Append(brackets[5]);
                sb.AppendLine();//Neue Zeile
            }
            return sb.ToString();
        }

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!