Список строк в одну строку

206

Допустим, у вас есть:

List<string> los = new List<string>();

В этом сумасшедшем функциональном мире, в котором мы живем в эти дни, один из них был бы лучшим для создания одной строки путем объединения этих:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

или обычный старый StringBuilder foreach

ИЛИ есть ли лучший способ?

maxfridbe
источник
9
Выглядит как .Net 4 будет также включать в себя string.join (строка, IEnumerable <строка>), что позволяет пропустить ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
Лука

Ответы:

289

Я бы пошел с вариантом А:

String.Join(String.Empty, los.ToArray());

Я рассуждаю так, потому что метод Join был написан для этой цели. Фактически, если вы посмотрите на Reflector, вы увидите, что небезопасный код был использован для его реальной оптимизации. Два других также РАБОТАЮТ, но я думаю, что функция Join была написана для этой цели, и, я думаю, наиболее эффективная. Хотя я могу ошибаться ...

Согласно @Nuri YILMAZ без .ToArray(), но это .NET 4+:

String.Join(String.Empty, los);
BFree
источник
GA! Сначала я даже не видел эту опцию - прочитал сразу за ней.
Джоэл Коухорн
2
В 3 раза быстрее, чем StringBuilder? Ух ты, я подумал, что это будет быстрее, не понимая, насколько быстрее. Хотя это имеет смысл, это сделано в небезопасном коде с использованием указателей, так что ... имеет смысл.
BFree
8
отлично! Единственное замечание: Join не нуждается в los.ToArray (), потому что List <T> может приводить IEnumarable <T>.
Нури Йылмаз
8
@Nuri: Этот вопрос был задан в 08 году, до выхода .Net 4. Перегрузка, которая принимает IEnumerable <T>, была добавлена ​​в .Net 4.
BFree
2
String.Join в сочетании с String.Concat - золотой. Пример: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin
51
string.Concat(los.ToArray());

Если вы просто хотите объединить строки, используйте string.Concat () вместо string.Join ().

Пент Плоомпуу
источник
18

Если вы используете .net 4.0, вы можете использовать сортировщик:

String.Join<string>(String.Empty, los);
mnieto
источник
10

String.Join () реализован довольно быстро, и, поскольку у вас уже есть коллекция рассматриваемых строк, это, вероятно, лучший выбор. Прежде всего, он кричит "Я присоединяюсь к списку строк!" Всегда приятно.

Дж Купер
источник
7
los.Aggregate((current, next) => current + "," + next);
landrady
источник
5

Мой голос - строка.

Нет необходимости в лямбда-вычислениях и создании временных функций, меньше вызовов функций, меньше стеков и выталкиваний.

Том Риттер
источник