使用linq拆分并加入C#

时间:2015-12-10 17:15:21

标签: c# linq

我有以下字符串数组。

 string[] sentence = new string[] { "The quick brown", "fox jumps over", "the lazy dog." };

我想用" "并以#。重新加入 这是为了学习c#中的linq。我知道我可以通过替换和其他内置功能轻松管理它。但我正在尝试这种方式。

 var sentenceresult = sentence.Select(c => c.Split(' '))

但如何申请"#"对于每个项目?

3 个答案:

答案 0 :(得分:6)

您可以使用String.Join执行此操作。

这应该给你预期的输出: -

string[] result = sentence.Select(x => String.Join("#", x.Split(' ')))
                          .ToArray();

Fiddle.

<强>更新

Enumerable.Select预测数组sentence中的每个项目。所以,当你说Select(x => x将迭代你的数组并在每次迭代中保存以下值时: -

"The quick brown"
"fox jumps over"
"the lazy dog."

现在,只考虑第一句话。 String.Join方法:

  

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

因此,当我们说x.Split(' ')时,它会实际拆分"The quick brown"(请记住我们正在考虑这里的第一句话)并返回一个与#连接的字符串数组。同样,对于其他句子,它将加入句子。

答案 1 :(得分:2)

使用你拥有的var sentenceresult = sentence.Select(c => c.Split(' '))这将为你提供一个可枚举的字符串数组,即。 IEnumerable<string[]>其中枚举中的每个条目都是来自每个子字符串的字符串数组。这有点笨拙,除非你真的确定它是你想要的。

您可能想要使用SelectMany

var sentenceresult = sentence.SelectMany(c => c.Split(' '));

这将为您提供一个string个对象的集合,其中每个字符串都是来自个人的单个单词,相当于:

var sentenceresult = new [] { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

然后您可以使用string.Join(sentenceresult)获得以下结果:

The#quick#brown#fox#jumps#over#the#lazy#dog.

答案 2 :(得分:2)

您可以尝试单行解决方案:

string[] res = sentence.Select(str => String.Join("#", str.Split())).ToArray();

或者如果你想要一个字符串:

string res2 = String.Join("#", sentence.SelectMany(str => str.Split()));