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

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

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

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

Похоже, .Net 4 также будет включать строку.Join (string, IEnumerable <string>), позволяющую пропустить ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx

luke 19.05.2010 17:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
212
1
172 234
6

Ответы 6

Я бы выбрал вариант А:

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

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

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

String.Join(String.Empty, los);

GA! Я даже сначала не увидел эту опцию - прочел сразу после нее.

Joel Coehoorn 25.11.2008 23:47

Я провел несколько тестов, и они показали, что это примерно в три раза быстрее, чем StringBuilder, но оба они были намного лучше, чем совокупный

Nathan Koop 25.11.2008 23:59

В 3 раза быстрее StringBuilder? Вау, я подумал, что это будет быстрее, не понимал, насколько быстрее. Однако это имеет смысл, это делается в небезопасном коде с использованием указателей, так что ... имеет смысл.

BFree 26.11.2008 00:01

красивый! единственное замечание: для соединения не требуется los.ToArray (), потому что List <T> может приводить IEnumerable <T>.

Nuri YILMAZ 10.03.2011 22:40

@Nuri: Этот вопрос был задан в 08, до выхода .Net 4. Перегрузка, которая принимает IEnumerable <T>, была добавлена ​​в .Net 4.

BFree 10.03.2011 23:15

@BFree: Понятно, вы правы! Мне было наплевать на опубликованную дату, извините.

Nuri YILMAZ 11.03.2011 00:28

String.Join в сочетании со String.Concat является золотым. Пример: 'String.Concat ("{", String.Join (",", m_Data), "}");'

KornMuffin 21.10.2011 20:01

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

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

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

string.Concat(los.ToArray());

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

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

String.Join<string>(String.Empty, los);
los.Aggregate((current, next) => current + "," + next);

Другие вопросы по теме