【问题标题】:C# List<string> to string with delimiterC# List<string> 到带分隔符的字符串
【发布时间】:2011-04-04 06:04:16
【问题描述】:

C#中是否有一个函数可以快速将一些集合转换为字符串并用分隔符分隔值?

例如:

List&lt;string&gt; names --> string names_together = "John, Anna, Monica"

【问题讨论】:

    标签: c# string list delimiter


    【解决方案1】:

    您可以使用String.Join。如果您有List&lt;string&gt;,则可以先致电ToArray

    List<string> names = new List<string>() { "John", "Anna", "Monica" };
    var result = String.Join(", ", names.ToArray());
    

    在.NET 4 中,您不再需要ToArray,因为String.Join 的重载需要IEnumerable&lt;string&gt;

    结果:


    约翰、安娜、莫妮卡

    【讨论】:

      【解决方案2】:

      如果你愿意,你也可以用 linq 做到这一点

      var names = new List<string>() { "John", "Anna", "Monica" };
      var joinedNames = names.Aggregate((a, b) => a + ", " + b);
      

      虽然我更喜欢 Quartermeister 回答中的非 linq 语法,但我认为 Aggregate 的执行速度可能会更慢(可能更多的字符串连接操作)。

      【讨论】:

      • 感谢您的快速回复,两者都可以正常工作。你说得对,我使用 Stopwatch 类做了一个小的性能测量,linq-way 慢得多: String.Join(", ", names.ToArray()); --> 耗时 18 个刻度 Aggregate((a, b) => a + ", " + b) --> 耗时 736 个刻度
      • 是的,我认为Aggregate 更适合数学类型的运算。对于字符串,此操作类似于 for each ing,只是附加到一个效率非常低的字符串,因为您正在为列表中存在的每个项目创建一个新字符串。
      • 请注意,如果容器为空,没有种子值的聚合将抛出 InvalidOperationException。使用种子版本 Aggregate(seed, func) 避免错误处理代码或条件检查。 String.Join 不会抛出空,因此不需要种子或额外的代码......另外它不需要 Linq,语法更清晰。
      • 如果您使用 StringBuilder,上述示例中的聚合可能会运行得更快。不推荐使用 '+' 来执行多重连接。请参阅此处的备注部分 (msdn.microsoft.com/en-us/library/…)
      • 我发现StringBuilder.AppendJoin() 看起来正是操作人员需要的:var names = new List&lt;string&gt;() { "John", "Anna", "Monica" }; string joinedNames = new StringBuilder().AppendJoin(", ", names);string.Join() 大致相同,我没有对此进行性能测试。如果您迫切需要一个没有聚合的 Linq 表单:var names = new List&lt;string&gt;() { "John", "Anna", "Monica" }; var joinedNames = new System.Text.StringBuilder(); names.ForEach(a =&gt; joinedNames.Append((joinedNames.Length &gt; 0 ?", " : "") + a)); //joinedNames.ToString();
      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2011-05-18
      • 2013-04-18
      • 2011-09-08
      • 2017-06-17
      相关资源
      最近更新 更多