Преобразование списка <int>в строку через запятую - PullRequest
96 голосов
/ 07 октября 2009

Есть ли способ взять список и преобразовать его в строку через запятую?

Я знаю, что могу просто зациклить и построить его, но каким-то образом я думаю, что некоторые из вас, ребята, более крутой способ сделать это?

Я действительно хочу научиться этим трюкам, поэтому, пожалуйста, объясните или дайте ссылку на документацию о методе, который вы используете.

Ответы [ 8 ]

168 голосов
/ 07 октября 2009
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
88 голосов
/ 02 ноября 2012

Простое решение

List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)

Я только что использовал это в своем коде, работая funtastic.

9 голосов
/ 07 октября 2009
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
6 голосов
/ 07 октября 2009

Примерно для одного миллиарда решений несколько более сложной версии этой проблемы - многие из которых являются медленными, содержат ошибки или даже не компилируются - см. Комментарии к моей статье на эту тему:

http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx

и комментарий StackOverflow:

Задача Эрика Липперта "Запятая", лучший ответ?

3 голосов
/ 07 октября 2009

Для большей крутости я бы сделал этот метод расширения для IEnumerable таким образом, чтобы он работал на любом IEnumerable:

public static class IEnumerableExtensions {
  public static string BuildString<T>(this IEnumerable<T> self, string delim) {
    return string.Join(",", self)        
  }
}

Используйте его следующим образом:

List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
1 голос
/ 07 октября 2009

Кажется достаточно быстрым.

IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));
1 голос
/ 07 октября 2009

Моя "умная" запись:

        List<int> list = new List<int> { 1, 2, 3 };
        StringBuilder sb = new StringBuilder();
        var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
                    (sb1, x) =>  sb1.AppendFormat(",{0}",x));

        // A lot of mess to remove initial comma
        Console.WriteLine(y.ToString().Substring(1,y.Length - 1));

Просто не понял, как условно добавить запятую.

0 голосов
/ 09 января 2019

вы можете использовать библиотеку System.Linq; Это более эффективно:

using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...