【问题标题】:List of strings to one string字符串列表到一个字符串
【发布时间】:2015-06-24 22:10:09
【问题描述】:

假设你有一个:

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

或者有没有更好的方法?

【问题讨论】:

标签: c# string performance functional-programming


【解决方案1】:

我会选择选项 A:

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

我的推理是因为 Join 方法是为此目的而编写的。事实上,如果您查看 Reflector,您会发现使用了不安全的代码来真正优化它。另外两个也可以工作,但我认为 Join 函数是为此目的而编写的,我猜是最有效的。不过我可能是错的......

根据@Nuri YILMAZ 没有.ToArray(),但这是.NET 4+:

String.Join(String.Empty, los);

【讨论】:

  • GA!起初我什至没有看到这个选项 - 直接读过去。
  • 比 StringBuilder 快 3 倍?哇,我认为它会更快,但没有意识到要快多少。这是有道理的,它是在不安全的代码中使用指针完成的,所以.....是有道理的。
  • 不错!唯一备注:Join 不需要 los.ToArray(),因为 List 可以强制转换 IEnumarable.
  • @Nuri:这个问题是在 08 年提出的,在 .Net 4 出来之前。 .Net 4 中添加了采用 IEnumerable 的重载。
  • String.Join 与 String.Concat 结合使用是黄金。例如:'String.Concat("{", String.Join(", ", m_Data), "}");'
【解决方案2】:
string.Concat(los.ToArray());

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

【讨论】:

  • 我认为这应该是公认的答案。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:
      los.Aggregate((current, next) => current + "," + next);
      

      【讨论】:

        【解决方案6】:

        我的投票是 string.Join

        无需创建 lambda 评估和临时函数,更少的函数调用,更少的堆栈推送和弹出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-21
          • 2013-08-11
          • 2012-08-18
          • 1970-01-01
          • 2015-09-11
          相关资源
          最近更新 更多