Jea*_*agr 5 c# ienumerable list word-count charactercount
我试图根据每个字符串中的单词数过滤字符串列表.我假设您将修剪字符串末尾的任何空格,然后计算字符串中剩余的空格数,以便WordCount = NumberOfSpaces + 1.这是最有效的方法吗?我知道对于基于字符数的过滤,以下工作正常...只是无法弄清楚如何使用C#/ LINQ简洁地编写它.
if (checkBox_MinMaxChars.Checked)
{
int minChar = int.Parse(numeric_MinChars.Text);
int maxChar = int.Parse(numeric_MaxChars.Text);
myList = myList.Where(x =>
x.Length >= minChar &&
x.Length <= maxChar).ToList();
}
Run Code Online (Sandbox Code Playgroud)
任何计算单词的想法?
更新:这就像一个魅力...谢谢马修:
int minWords = int.Parse(numeric_MinWords.Text);
int maxWords = int.Parse(numeric_MaxWords.Text);
sortBox1 = sortBox1.Where(x => x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() >= minWords &&
x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() <= maxWords).ToList();
Run Code Online (Sandbox Code Playgroud)
我会以更简化的方式处理它,因为您已经指出可以可靠地使用空格作为分隔符,如下所示:
var str = " the string to split and count ";
var wordCount = str.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count();
Run Code Online (Sandbox Code Playgroud)
编辑:
如果需要最佳性能并且内存使用是一个问题,你可以编写自己的方法和杠杆IndexOf()(虽然有很多途径可以实现这样的问题,我只是喜欢重用而不是从头开始代码设计):
public int WordCount(string s) {
const int DONE = -1;
var wordCount = 0;
var index = 0;
var str = s.Trim();
while (index != DONE) {
wordCount++;
index = str.IndexOf(" ", index + 1);
}
return wordCount;
}
Run Code Online (Sandbox Code Playgroud)