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


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

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


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);

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);

10

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



5

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.