Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于字数筛选字符串_C#_List_Ienumerable_Word Count_Charactercount - Fatal编程技术网

C# 基于字数筛选字符串

C# 基于字数筛选字符串,c#,list,ienumerable,word-count,charactercount,C#,List,Ienumerable,Word Count,Charactercount,我试图根据每个字符串中的字数筛选字符串列表。我假设您将修剪字符串末端的任何空白,然后计算字符串中剩余的空格数,以便WordCount=NumberOfSpaces+1。这是最有效的方法吗?我知道,对于基于字符数的过滤,下面的方法可以很好地工作……只是不知道如何使用C#/LINQ简洁地编写它 if(复选框\u MinMaxChars.Checked) { int minChar=int.Parse(numeric_MinChars.Text); int maxChar=int.Parse(nume

我试图根据每个字符串中的字数筛选字符串列表。我假设您将修剪字符串末端的任何空白,然后计算字符串中剩余的空格数,以便WordCount=NumberOfSpaces+1。这是最有效的方法吗?我知道,对于基于字符数的过滤,下面的方法可以很好地工作……只是不知道如何使用C#/LINQ简洁地编写它

if(复选框\u MinMaxChars.Checked)
{
int minChar=int.Parse(numeric_MinChars.Text);
int maxChar=int.Parse(numeric_MaxChars.Text);
myList=myList.Where(x=>
x、 长度>=minChar&&
x、 长度x.Trim().Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries.Count()>=minWords&&

x、 Trim().Split(new char[]{''},StringSplitOptions.removemptyentries).Count()我将以更简化的方式处理它,因为您已经指出可以可靠地将空格用作分隔符,如下所示:

var str = "     the string to split and count        ";
var wordCount = str.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count();
编辑:

如果需要最佳性能,并且需要考虑内存使用,那么您可以编写自己的方法并利用
IndexOf()
(尽管有许多实现此类问题的途径,但我更喜欢重用,而不是从头开始的代码设计):


使用空格将字符串拆分为一个数组并计算其数量如何

s.Split().Count()

删除了空格:)

您计算单词的方法是正确的。
String.Split
将给出类似的结果,以提高内存使用率

而不仅仅是实现
int-WordCount(string-text)
函数并将其传递到以下位置:

myList.Where(s => WordCount(s) > minWordCount)

是否希望所有字数在给定范围内的字符串

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);
int minCount=10;
int maxCount=15;
IEnumerable结果=列表
.Select(String=>new{String,Words=String.Split()})
.其中(x=>x.Words.Length>=minCount
&&x.单词长度x.字符串);

添加RemoveEmptyEntries(如matthew的回答中所述)会更好:)无需使用
,只需使用
string.Split()
不带参数(或null)和
Split
假设空格字符作为分隔符。int-minWords=int.Parse(numeric_-minWords.Text);int-maxWords=int.Parse(numeric_MaxWords.Text);sortBox1=sortBox1.Where(x=>x.Trim().Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries)。Count()>=minWords&&x.Trim().Split(新字符[]{'},StringSplitOptions.RemoveEmptyEntries)。Count()这样的方法比使用LINQ查询更有效吗?一般来说,LINQ的开销比这样的方法更大。你必须记住,在幕后,LINQ只是将你的谓词函数用在一个美化的foreach循环中。你会看到多大的性能增益……这完全取决于问题。
s.Split().Count()
myList.Where(s => WordCount(s) > minWordCount)
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);