public static void ListSingleColumn <T>(IEnumerable <T> input, PrettyFormatter <T> formatter = null) { formatter = formatter ?? new PrettyFormatter <T>(); foreach (var value in input.OrderBy(x => formatter.GetName(x))) { using (new ConsoleColorSwitch().To(formatter.GetForeground(value), formatter.GetBackground(value))) { Console.Write(formatter.GetName(value)); } Console.WriteLine(); } }
public static void ListMultiColumn <T>(IEnumerable <T> input, PrettyFormatter <T> formatter = null) { formatter = formatter ?? new PrettyFormatter <T>(); var values = input.Select(x => x).ToArray(); var maxValueLength = values.Max(x => formatter.GetName(x).Length); var maxCellLength = maxValueLength + 2; var consoleWidth = Console.WindowWidth - 1; var columnsPerRow = consoleWidth / maxCellLength; if (columnsPerRow <= 1) { ListSingleColumn(values, formatter); return; } var rowCount = (values.Length + columnsPerRow - 1) / columnsPerRow; for (var row = 0; row < rowCount; row++) { for (var column = 0; column < columnsPerRow; column++) { var i = column * rowCount + row; if (i < values.Length) { Console.CursorLeft = column * maxCellLength; var value = values[i]; using (new ConsoleColorSwitch().To(formatter.GetForeground(value), formatter.GetBackground(value))) { Console.Write(formatter.GetName(value)); } } } Console.WriteLine(); } }