我有以下字符串数组。
string[] sentence = new string[] { "The quick brown", "fox jumps over", "the lazy dog." };
我想用" "并以#。重新加入 这是为了学习c#中的linq。我知道我可以通过替换和其他内置功能轻松管理它。但我正在尝试这种方式。
var sentenceresult = sentence.Select(c => c.Split(' '))
但如何申请"#"对于每个项目?
答案 0 :(得分:6)
您可以使用String.Join
执行此操作。
这应该给你预期的输出: -
string[] result = sentence.Select(x => String.Join("#", x.Split(' ')))
.ToArray();
<强>更新强>
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()));