2012-02-20 1 views
1

Мне нужно отформатировать коллекцию удвоений до двух знаков после запятой и отобразить ее в консольном приложении, разделив ее запятой (,).Формат IEnumerable <double> пока отображается в консоли

Я использовал следующие:

var result = GetResults() //returns 1.234125, 3.56345, 6.43254 

Console.WriteLine(string.Join(",",result) 

Однако это не форматирует значения до 2 знаков после запятой. Я хочу показать 1.23.3.56.6.43 на консоли. Кроме того, элементы в коллекции «результат» могут варьироваться в пределах нескольких тысяч двухместных. Поэтому я ищу оптимизированный фрагмент кода, который не будет включать в себя какой-либо бокс и займет меньше времени, чтобы отобразить себя на консоли.

Спасибо, -Mike

+2

Стоимость печати на консоли значительно больше, чем стоимость любого бокса. – SLaks

+0

Что такое тип возврата метода GetResults()? – sll

+0

@SLaks: на миллион объектов бокс имел бы значение – sll

ответ

0

Console класса эффективен буферами всех полученных данных, так что несколько Console.Write вызовов на самом деле не уменьшает permormance. Также вам не нужно получать весь текст в одной огромной части. Так что мой ответ:

IEnumerable<double> result = new double[] { 1.1234, 2.2345, 3.3456 }; 
foreach (double item in result) 
    Console.Write ("{0},", item.ToString("0.00")); 
Console.WriteLine(); 

Явная double.ToString вызова позволяет избежать ненужного бокса. Но я предлагаю вам сравнить производительность в обоих направлениях, прежде чем использовать более сложную.

Также обратите внимание, что в некоторых культурах запятая уже используется в качестве дробного сепаратора.