2015-11-02 57 views
6

有什么办法将字符串列表转换为逗号分隔的字符串吗?将字符串数组转换为逗号分隔字符串,并附加级联

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

转换成:

'test', 'abc', '123' 

可能的解决方案:

  1. 环绕每串'',然后在列表上使用String.join
  2. Foreach列表中的每个字符串,并做的''',',最后串联除去最后','

有没有简单的LINQ(一行表达)两者都做?

+0

使用var x = string.Join(“,”,yourArray);' – slugster

+0

@slugster,我希望我在我的方法中提到 – Reddy

+0

注意:确保你没有试图构建JSON ...可能endup与正方形被重新改变的轮子。 –

回答

15

有没有简单的LINQ(一行表达)两者都做。

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

基础的LINQ:变换是Select语句。过滤器是Where语句。

也就是说,有很多不是Linq的字符串操作工具可用,而且它们更有可能针对字符串进行优化,所以在查看Linq之前我总是看着它们。

+2

我链接到了现在被删除的另一个问题 - http://stackoverflow.com/a/33471600/232593 - 我认为他们的代码可能比我的代码更好,即使它不使用Linq。 'return“'”+字符串。加入(“','”,data)+“'”;' –

+2

@AsadSaeeduddin - 如果您想要取消删除您的答案,我知道我个人会赞成它,即使没有找到任何Linq。 –

+2

我也觉得使用linq无处不在。当你从里面看linq方法时,你会发现你在程序中弄得乱七八糟,只是做一个简单的计数! –

3

您可以使用集合LINQ

Array.Skip(1).Aggregate(Array[0],(a,b) => string.Format("{0},'{1}'",a,b)); 
+0

智能解决方案。仍然在探索/学习'linq' :) – Reddy

+0

虽然看起来很聪明,但由于O(n^2)的表现,请不要将它用于真实代码以及多于两个项目... –

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

风格偏好 - 为什么要使用'Concat 'over'+'生成相同的代码? –

+2

@AlexeiLevenkov对我来说,更容易阅读''''''分离的参数,特别是当它包含'+'和'condition'等其他操作? true:false'。例如比较'“a”+((a> 1)?“yes:”+ variable:“no one”)+“b”'和'string.Concat(“a”,(a> 1)?“是:“+ variable:”no“,”b“)' – Backs

0

您也可以使用聚合方法: 例子:

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存储过程。

相关问题