将字符串数组转换为逗号分隔的字符串,并进行额外的串联。

12

有没有办法将字符串列表转换为逗号分隔的字符串?

String[] data = new String[] { "test", "abc", "123" }

转换成:

'test', 'abc', '123'

可能的解决方案:

  1. 将每个字符串用''括起来,然后在列表上使用String.join
  2. foreach遍历列表中的每个字符串,并连接''',',最后删除最后一个','

是否有任何简单的Linq(一行表达式)可以同时执行这两个操作?


1
使用 var x = string.Join(", ", yourArray); - slugster
@slugster,希望我在我的方法中提到了它。 - RaceBase
顺便提一下:确保你不是在尝试构建JSON...否则可能会重复造轮子。 - Alexei Levenkov
5个回答

29

有没有简单的Linq(一行表达式)可以同时完成这两个操作。

string.Join(",", data.Select(item => "'" + item + "'"))

Linq的基础知识:转换使用Select语句。筛选使用Where语句。

话虽如此,有许多可用于字符串操作的工具不是Linq,它们更有可能为字符串进行优化,因此在寻求Linq之前,我会先考虑它们。


2
我链接到了另一个现在已被删除的问题 - http://stackoverflow.com/a/33471600/232593 - 我认为他们的代码可能比我的性能更好,尽管它没有使用 Linq。return "'" + string.Join("','", data) + "'"; - Merlyn Morgan-Graham
2
@AsadSaeeduddin - 如果你想恢复你的答案,我个人会投赞成票,即使其中没有任何 Linq。 - Merlyn Morgan-Graham
2
我也认为在任何地方都使用linq并不好。当你从内部查看linq方法时,你会发现你在程序内部制造了一团糟,只是为了做一个简单的计数! - M.kazem Akhgary
2
@M.kazemAkhgary 有关可读性和过早优化,这方面确实有值得探讨的地方,但我同意您的观点,即能够理解和做出这些权衡是很好的。我提到它们是因为我希望人们意识到需要做出权衡。 - Merlyn Morgan-Graham
1
当我要给AsadSaeeduddin的回答点赞时,他把它删除了。我认为他的回答很好,因为它很简单。也许他删除它是因为OP想要使用LINQ来解决问题。 - Han

3
你可以使用聚合 Linq。
Array.Skip(1).Aggregate(Array[0],(a,b) => string.Format("{0},'{1}'",a,b));

虽然看起来很聪明,但是由于O(n^2)的性能问题,请不要在实际代码中使用它来处理超过几个项目的情况。 - Alexei Levenkov

1
String[] data = new String[]{"test","abc","123"};
var result = string.Join(",", data.Select(o => string.Concat("'",o,"'"));

风格偏好 - 为什么要使用Concat而不是生成相同代码的+ - Alexei Levenkov
2
对我来说,阅读以逗号分隔的参数更容易,特别是当它包含其他操作符时,比如 +condition ? true : false。例如,比较 "a" + ((a>1) ? "yes: " + variable : "no one") + "b"string.Concat("a", (a>1) ? "yes: " + variable : "no", "b") - Backs

0
您还可以使用Aggregate方法: 示例:
List<string> fruit = new List<string> {"Apple", "Orange", "Pear", "Tomato", "Banana"};
var fruitSentence = fruit.Aggregate((current, next) => $"{current},{next}");

0

注意:如果您从IEnumerable或类似内容开始,必须在LINQ语句的末尾调用.ToArray()。

input parameter: IEnumerable<string> feederIdList    

var feederListString = String.Join(",", feederIdList.Select(feeder => "\"" + feeder + "\"").ToArray());

在我的情况下,我需要每个字符串都有双引号,以便稍后传递到Oracle存储过程中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接