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