有没有一种方法可以将List转换为逗号分隔的字符串?
我知道我可以使用循环来构建它,但是我认为你们中的某些人会有更酷的方法吧?
我真的想学习这些“技巧”,所以请解释一下或者链接到您使用的方法的文档。
有没有一种方法可以将List转换为逗号分隔的字符串?
我知道我可以使用循环来构建它,但是我认为你们中的某些人会有更酷的方法吧?
我真的想学习这些“技巧”,所以请解释一下或者链接到您使用的方法的文档。
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
简单的解决方案是
List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)
我刚刚在我的代码中使用它,工作得非常好。
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
如果你想要了解更为复杂版本的此问题的近乎无数解决方案,其中许多都很慢、有bug或甚至无法编译,请参阅我在这个主题上的文章评论:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/comma-quibbling
同时,这里有StackOverflow评论:
public static class IEnumerableExtensions {
public static string BuildString<T>(this IEnumerable<T> self, string delim = ",") {
return string.Join(delim, self)
}
}
使用方法如下:
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
return string.Join(delim, self);
。 - Andrew我的“聪明”入口:
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
- 因此请将其编写为foreach
。 - Pavel MinaevSelect
作为 foreach
已经超出了“有趣”的范畴,进入了“滥用”的领域。在这里更有趣的方法是使用 Enumerable.Aggregate
和 StringBuilder
作为种子值 - 试试看吧。 - Pavel Minaev看起来相当快。
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));
你可以使用System.Linq库,它更高效:
using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));