【问题标题】:Converting array of string to string with a defined separator使用定义的分隔符将字符串数组转换为字符串
【发布时间】:2016-03-17 07:51:56
【问题描述】:

我有以下代码:

var days = new string[] { "1", "2", "3", "4" });

我需要将 days 转换为如下字符串:

string daysConverted = "'1','2','3','4'";

我尝试使用 string.Join:

var daysConverted = string.Join("','", days); 

但我得到了:

"1','2','3','4"  // missing quotes at the beginning and at the end. 

我可以在两边连接一个引号,但我想知道是否有任何语法可以一次性完成。

【问题讨论】:

    标签: c# .net string linq


    【解决方案1】:

    你应该在加入它们之前将字符串包装成'

    var result = String.Join(",", days.Select(s => "'" + s + "'"));
    

    【讨论】:

    • 选择不是天数的延长,因为天数是字符串[]
    • @ehh 数组实现了IEnumerable,上面定义了Linq扩展方法,应该是这样。你是否包含了命名空间System.Linq
    • 您刚刚以这种方式增加了字符串连接的数量... :-(
    • @ehh 你的问题是用其他方法来获得所需的输出,而不是最好的方法,所以 Domysee 给了你正确的答案。接受的答案仍然是您所说的dont want。这可能是您问题的最佳答案,但不是正确答案。
    • @Reddy 你是对的。伙计们对此感到抱歉,如果我能接受这两个答案,我就这样做了。
    【解决方案2】:

    您还必须在末尾和开头添加它,因为Join 只会合并两个字符串。话虽如此,将"1""2"',' 的分隔符组合在一起时,您会得到"1','2",其中分隔符只是添加在两个元素之间

    截至MSDN

    使用指定的连接字符串数组的所有元素 每个元素之间的分隔符

    最后,就内存和速度而言,以下解决方案似乎是最好的,因为您的字符串连接数量最少(开始和结束两个,每个元素一个 -> 2 + n)。

    var daysConverted = "'" + string.Join("','", days) + "'"; 
    

    【讨论】:

    • 这是我在问题中已经给出的解决方案。我正在寻找另一种解决方案而不必连接。谢谢
    • 但是这个更快,使用更少的内存,不需要Linq ;)
    【解决方案3】:

    嗯,说到最小的字符串连接,这里有一个使用 LINQ AggregateStringBuilder 的解决方案。它不是那么简洁,但执行...个连接。

    var daysConverted = days.Aggregate(new StringBuilder(), (sb, s) => 
        (sb.Length > 0 ? sb.Append(",") : sb).Append("'").Append(s).Append("'"))
        .ToString(); 
    

    【讨论】:

      【解决方案4】:

      我可以在两边连接一个引号,但我想知道是否有任何语法可以一次性完成。

      不是以优化的方式。 string.Join 在内部使用 StringBuilder 来组成字符串。在string.Join 周围作弊会使您的代码不那么清晰(例如通过使用棘手的LINQ 语句)并且速度更慢。

      最后,@HimBromBeere 建议的经典方式是最好的。

      【讨论】:

      • 有趣!那么可能使用 string.concatenate() 而不是 '+' 运算符会更好?
      • @ehh + 运算符转换为string.Concat。请参阅 goo.gl/FTO589 的右窗格。问题是string.Concat 返回一个string,所以它必须分配它。在string.Join 内使用string.Concat 意味着您分配临时字符串只是为了将它们用于string.Join
      • @xanatos 史诗!你在微软视觉工作室部门工作? :)
      • @xanatos 很棒的信息!我的意思是在 HimBromBeere 解决方案中使用 string.concatenate,但正如你提到的(并且很好地展示)+ 运算符被转换为 string.Concat。
      猜你喜欢
      • 2019-08-23
      • 1970-01-01
      • 2010-10-19
      • 2015-06-02
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多