Filtering a String based on word count
我试图根据每个字符串中的单词数筛选字符串列表。我假设您将修剪字符串末尾的任何空白,然后计算字符串中剩余的空格数,这样wordcount=number of space+1。这是最有效的方法吗?我知道,对于基于字符计数的过滤,下面的工作是很好的……只是不知道如何使用c/linq简洁地编写它。
1 2 3 4 5 6 7 8 9 | 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(); } |
有点字的想法吗?
最新消息:这很有魅力……谢谢马修:
1 2 3 4 5 | 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(); |
号
我将以更简单的方式处理它,因为您已经指出空间可以可靠地用作分隔符,如下所示:
1 2 | var str =" the string to split and count "; var wordCount = str.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count(); |
编辑:
如果需要最佳性能,并且内存使用是一个问题,那么您可以编写自己的方法并利用
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
号
你计算单词的方法是可以的。对于更多的内存使用,
而不仅仅是实现您的
1 | myList.Where(s => WordCount(s) > minWordCount) |
。
您要在给定范围内使用字数计数的所有字符串吗?
1 2 3 4 5 6 7 | int minCount = 10; int maxCount = 15; IEnumerable<string> result = list .Select(String => new { String, Words = String.Split() }) .Where(x => x.Words.Length >= minCount && x.Words.Length <= maxCount) .Select(x => x.String); |
如何使用空格将字符串拆分为数组并对其进行计数?
1 | s.Split().Count() |
已删除空间:)