Список рядків до одного рядка


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

АЛЕ існує кращий спосіб?


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

Відповіді:


289

Я б пішов з варіантом A:

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

Моє міркування полягає в тому, що для цієї мети був написаний метод Join. Насправді, якщо ви подивитесь на Reflector, ви побачите, що небезпечний код використовувався для його оптимізації. Інші два також РОБОТИ, але я думаю, що функція Join була написана для цієї мети, і я б здогадався, найбільш ефективна. Я можу помилитися, хоча ...

Відповідно до @Nuri YILMAZ без .ToArray(), але це .NET 4+:

String.Join(String.Empty, los);

ГА! Я навіть не бачив цього варіанту спочатку, читаючи прямо повз нього.
Joel Coehoorn

2
В 3 рази швидше, ніж StringBuilder? Нічого собі, я подумав, що це буде швидше, не зрозумів, наскільки швидше. Це має сенс, хоча це робиться в небезпечному коді за допомогою покажчиків, тому ..... має сенс.
BFree

8
приємно! лише зауваження: приєднатися не потрібно los.ToArray (), оскільки Список <T> може видавати IEnumarable <T>.
Нурі ЙІЛМАЗ

8
@Nuri: Це питання було задано в 08, раніше. Net 4 не було. Перевантаження, яке приймає IEumerable <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.