C # Список <string> до рядка з роздільником


631

Чи є функція в C # для швидкого перетворення деякої колекції в рядкові та роздільні значення за допомогою роздільника?

Наприклад:

List<string> names -> string names_together = "John, Anna, Monica"

Відповіді:


1201

Можна використовувати String.Join. Якщо у вас є, List<string>ви можете зателефонувати ToArrayспочатку:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

У .NET 4 вам більше не потрібно ToArray, оскільки є перевантаження, String.Joinяка сприймає IEnumerable<string>.

Результати:


Джон, Анна, Моніка


95

Ви також можете зробити це за допомогою linq, якщо хочете

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Хоча я віддаю перевагу синтаксису non-linq у відповіді Quartermeister, і я думаю, що він Aggregateможе працювати повільніше (можливо, більше операцій з об'єднання рядків).


19
Дякую за швидкі відповіді, обидва добре працюють. Ви маєте рацію, що я зробив невелике вимірювання продуктивності за допомогою секундомірного класу, і шлях linq набагато повільніше: String.Join (",", names.ToArray ()); -> прийняв 18 кліщів (Aggregate (A, B) => а + "" + Ь) -> взяли 736 тиків
нан

2
Так, я думаю Aggregate, що краще для операцій типу Math. За допомогою рядків ця операція схожа на for eaching та просто додавання до рядка, який дуже повільний і неефективний, оскільки ви створюєте нову рядок для кожного елемента, який існує у списку.
Боб

Зауважте, що агрегат без значення насіння викине InvalidOperationException, якщо контейнер порожній. Використовуйте насіннєву версію Aggregate (насіння, функція), щоб уникнути обробки помилок або умовних перевірок. String.Join не запускається порожнім, тому не потрібно ніякого насіння чи додаткового коду ... плюс це не вимагає Linq, а синтаксис трохи зрозуміліший.
Хуаканача

1
Сукупність у наведеному вище прикладі може працювати швидше, якщо ви будете використовувати StringBuilder. Використання "+" для здійснення декількох конкатенацій не рекомендується. Дивіться розділ зауважень тут ( msdn.microsoft.com/en-us/library/… )
Ілля Денисов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.