static void DisplayResults(ResultSet[] resultSets) { int maxNameLength = 2 + resultSets.Max(s => s.Name.Length); for (int i = 0; i < resultSets[0].Results.Count; i++) { Console.WriteLine(); Console.WriteLine(resultSets[0].Results[i].Name); var averageStrings = resultSets.Select(s => s.Results[i].Average.ToString("f4")).ToArray(); var sdStrings = resultSets.Select(s => s.Results[i].StandardDeviation.ToString("f4")).ToArray(); int maxAverageLength = averageStrings.Max(s => s.Length); int maxSDLength = sdStrings.Max(s => s.Length); var bestResult = resultSets.Min(s => s.Results[i].Average); var factorStrings = resultSets.Select(s => (s.Results[i].Average / bestResult).ToString("f2")).ToArray(); int maxFactorLength = factorStrings.Max(s => s.Length); for (int j = 0; j < resultSets.Length; j++) { Console.WriteLine(" " + (resultSets[j].Name + ":").PadRight(maxNameLength) + averageStrings[j].PadLeft(maxAverageLength) + resultSets[0].Results[i].Unit + " +- " + sdStrings[j].PadLeft(maxSDLength) + resultSets[0].Results[i].Unit + " (" + factorStrings[j].PadLeft(maxFactorLength) + "x)"); } } }