Есть ли способ взять список и преобразовать его в строку, разделенную запятой?
Я знаю, что могу просто зациклировать и построить его, но почему-то я думаю, что некоторые из вас, ребята, более классный способ сделать это?
Я действительно хочу изучить эти типы "трюков", поэтому, пожалуйста, объясните или поделитесь с документами о методе, который вы используете.
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
Простым решением является
List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)
Я использовал его только сейчас в своем коде, работая funtastic.
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
Примерно для одного миллиона решений для немного более сложной версии этой проблемы, многие из которых медленны, ошибочны или даже не компилируются, см. комментарии к моей статье по этому вопросу:
http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx
и комментарий StackOverflow:
Для дополнительной прохлады я бы сделал это методом расширения в IEnumerable <T> , чтобы он работал на любом 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(", "));
Кажется разумным быстро.
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));
Моя "умная" запись:
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));
Просто не понял, как условно добавить запятую.
Select
с побочными эффектами в лямбде. В этом случае вы даже не используете y
, так что ваш Select
по сути является просто foreach
- поэтому запишите его как таковой.
вы можете использовать библиотеку System.Linq; Это более эффективно:
using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));