Перетворити `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.