Feedback

C# - Zweidimensionales Array als "Tabelle" darstellen

Veröffentlicht von am 8/16/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!