Перетворити `List <string>` у рядок, відокремлений комами


75

Чи є швидкий спосіб перетворити List<string>на stringC #, розділені комами ?

Я роблю це так, але, можливо, є швидший чи ефективніший спосіб?

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = string.Join(",", ls.ToArray());

PS: Шукали на цьому сайті, але більшість рішень стосуються Java або Python


2
Ні, ти робиш це правильно. Хоча я не думаю, що це потрібно робити ToArray().
Юк

2
Швидше писати чи швидше виконувати?
Ilia G

Обидва :), але, мабуть, це неможливо
Озкан

@Yuck Це потрібно для перетворення на string[](Тому що я не використовую .NET 4)
Озкан

@Ozkan Вам, мабуть, слід позначити своє запитання відповідно до тієї фреймворкової версії, проти якої ви працювали тоді. Думаю, ви знайдете більшість відповідей, якщо припустити, що ви використовуєте останню версію.
Юк

Відповіді:


116

У .NET 4 вам не потрібен ToArray()дзвінок - string.Joinвін перевантажений для прийняття IEnumerable<T>або просто IEnumerable<string>.

Існують потенційно більш ефективні способи зробити це до .NET 4, але чи вони вам справді потрібні? Це насправді вузьке місце у вашому коді?

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


19
string.Join (",", myList)
Махеш,

15

Далі ви отримаєте список, відокремлений комами. Не забудьте додати заяву про використання дляSystem.Linq

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = ls.Aggregate((x,y) => x + "," + y);

дасть один, два

якщо вам потрібен пробіл після коми, просто змініть останній рядок на string type = ls.Aggregate((x,y) => x + ", " + y);


@Ozkan Будь ласка, протестуйте і повідомте нас.
Dan J

насправді, я не перевіряв. Тільки з двома елементами у Списку, ні, вони однаково швидкі, але, розбиваючи його до 100 000 елементів, Агрегат насправді набагато повільніший за рядок. Приєднуйтесь. Добре знати, я здогадуюсь. Раніше я віддав перевагу агрегату, але, думаю, перейду до ряду. Приєднуйтесь у майбутньому
Ентоні Шоу

11

Щоб розширити інформацію про Jon Skeets, відповідайте на цей код у .Net 4:

string myCommaSeperatedString = string.Join(",",ls);


2
static void Main(string[] args)
{
   List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"};
   string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings);
   Console.Write(CommaSeparateString);
   Console.ReadKey();
}

private static string GenerateCommaSeparateStringFromList(List<string> listStrings)
{
   return String.Join(",", listStrings);  
}

Перетворіть список рядків у рядок C #, розділений комами.


Хоча цей код може відповісти на питання, надання додаткового контексту щодо того, як та / або чому він вирішує проблему, покращило б довгострокове значення відповіді. Будь ласка, прочитайте цю інструкцію, щоб отримати якісну відповідь.
thewaywewere

0

Саме таким способом я волів би бачити, чи підтримував я ваш код. Якщо вам вдасться знайти швидше рішення, воно буде дуже езотеричним, і ви дійсно повинні поховати його всередині методу, який описує, що він робить.

(чи все ще працює без ToArray)?


1
Я можу робити string.Joinлише на Array's of strings. Тож це необхідно (бо я не використовую.NET 4
Озкан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.