字符串列表到一个字符串


206

假设您有一个:

List<string> los = new List<string>();

在这个疯狂的功能世界中,我们生活在这些日子中,其中之一最适合通过串联以下内容来创建一个字符串:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

或普通的旧StringBuilder foreach

或者,还有更好的方法?


9
像.NET 4.0的外观也将包括的string.join(字符串的IEnumerable <字符串>),让你跳过ToArray的()msdn.microsoft.com/en-us/library/dd783876.aspx
卢克

Answers:


289

我会选择A:

String.Join(String.Empty, los.ToArray());

我的理由是因为Join方法是为此目的而编写的。实际上,如果您查看Reflector,就会发现使用了不安全的代码对其进行了优化。另外两个也很有效,但是我认为Join函数是为此目的而编写的,我想这是最有效的。我可能是错的...

按照@Nuri YILMAZ不带.ToArray(),但这是.NET 4+:

String.Join(String.Empty, los);

GA!我什至在初次阅读时都没有看到此选项。
Joel Coehoorn

2
比StringBuilder快3倍?哇,我觉得这样会更快,却没有意识到到底有多快。不过,这是有道理的,它是使用指针在不安全的代码中完成的,所以...是有道理的。
BFree

8
真好!仅作说明:Join不需要los.ToArray(),因为List <T>可以强制转换IEnumarable <T>。
Nuri YILMAZ

8
@Nuri:这个问题是在.Net 4发布之前的08年提出的。该需要的IEnumerable <T>过载在.NET 4的溶液中加入
贝丽

2
与String.Concat结合使用的String.Join是金色的。例如:“ String.Concat(“ {”,String.Join(“,”,m_Data),“}”);'
KornMuffin 2011年

51
string.Concat(los.ToArray());

如果只想连接字符串,则使用string.Concat()而不是string.Join()。


18

如果使用.net 4.0,则可以使用排序方式:

String.Join<string>(String.Empty, los);

10

String.Join()的实现速度非常快,并且由于您已经有问题的字符串的集合,可能是最佳选择。最重要的是,它喊着“我正在加入一个字符串列表!” 总是很好。


7
los.Aggregate((current, next) => current + "," + next);

5

我的投票是字符串。

无需创建lambda评估和临时函数,减少了函数调用,减少了栈压入和弹出操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.