C#列表与分隔符字符串
问题描述:
C#中有一个函数来快速将某些集合转换为字符串并用分隔符分隔值吗?C#列表<string>与分隔符字符串
例如:
List<string> names
- >string names_together = "John, Anna, Monica"
答
您可以使用String.Join
。如果你有一个List<string>
那么你可以拨打ToArray
第一:
List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
在.NET 4中,您不需要再ToArray
,因为是需要一个IEnumerable<string>
的String.Join
过载。
答
你也可以做到这一点使用LINQ,如果你想
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
虽然我更喜欢非LINQ语法Quartermeister的答案,我想Aggregate
可能执行速度较慢(可能更字符串连接操作)。
答
List<string> targets = new List<string>();
var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;
if (InboxChecked)
{
targets.Add("Inbox");
}
if (BannerChecked)
{
targets.Add("Banner");
}
if (EmailChecked)
{
targets.Add("Email");
}
var index = 0;
if (targets.Any())
{
var aggregate = targets.Aggregate((s1, s2) =>
{
return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
});
// aggregate.Dump();
}
// returns -> Inbox and Email
+8
这是为什么呢?它与OP几乎没有任何关系......? – Assimilater 2017-06-29 19:55:04
感谢您的快速回复,两者都正常工作。你是对的我用Stopwatch类做了一个小的性能测量,而linq-way要慢得多:String.Join(“,”,names.ToArray()); - >花了18个刻度 总计((a,b)=> a +“,”+ b) - >花了736个刻度 – nan 2010-08-26 13:09:28
是的,我认为Aggregate对于数学类型的操作更好。对于字符串这个操作,它与''for each''类似,只是附加到一个效率低下的字符串,因为您要为列表中存在的每个项目创建一个新的字符串。 – Bob 2010-08-26 13:26:11
请注意,如果容器为空,则没有种子值的聚合将引发InvalidOperationException。使用种子版本Aggregate(seed,func)来避免错误处理代码或条件检查。 String.Join不会抛出空,所以不需要种子或额外的代码......再加上它不需要Linq并且语法更清晰一些。 – Huacanacha 2015-11-25 21:58:48