using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HeuristicLab.MetaOptimization.Test { public class TableBuilder { private List columnNames; private List rows = new List(); public TableBuilder(params string[] columnNames) { this.columnNames = new List(columnNames); AppendRow(columnNames); } public void AppendRow(params string[] values) { if (values.Length != columnNames.Count) throw new ArgumentException("Value count does not match column name count"); this.rows.Add(values); } public override string ToString() { StringBuilder sb = new StringBuilder(); int[] columnSizes = GetColumnSizes(); for (int rowIdx = 0; rowIdx < rows.Count; rowIdx++) { if (rowIdx == 1) { sb.AppendLine(string.Join("", Enumerable.Repeat("-", columnSizes.Sum() + columnSizes.Count()))); } for (int colIdx = 0; colIdx < rows[rowIdx].Length; colIdx++) { sb.AppendFormat("{0} ", rows[rowIdx][colIdx].PadLeft(columnSizes[colIdx])); } sb.AppendLine(); } return sb.ToString(); } private int[] GetColumnSizes() { int[] sizes = new int[columnNames.Count]; for (int i = 0; i < columnNames.Count; i++) { foreach (var row in rows) { if (row[i].Length > sizes[i]) sizes[i] = row[i].Length; } } return sizes; } } }