这样做的效率如何?...
CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
字符串
bjp0bcyl1#
好了,我只是敲了一些代码来计算你的方法的时间:
int count = 0; for (int i = 0; i < s.Length; i++) { if (char.IsUpper(s[i])) count++; }
字符串结果:您的:19737滴答我的:118滴答差别很大啊!有时候,最直接的方式也是最有效的。
编辑
只是出于兴趣,这个:
int count = s.Count(c => char.IsUpper(c));
型在2500个滴答声左右。所以对于一个“Linqy”的一行程序来说,它是相当快的。
slsn1g292#
首先,没有理由需要调用ToCharArray(),因为假设CommentText是一个字符串,它已经是一个IEnumerable<char>了。其次,你应该调用char.IsUpper,而不是假设你只处理ASCII值。代码应该看起来像,
ToCharArray()
CommentText
IEnumerable<char>
char.IsUpper
CommentText.Count(char.IsUpper)
字符串第三,如果你担心速度,没有什么可以击败旧的for循环,
int count = 0; for (int i = 0; i < CommentText.Length; i++) if (char.IsUpper(CommentText[i]) count++;
型一般来说,调用任何方法都会比内联代码慢,但只有当你绝对确定这是代码中的瓶颈时,才应该进行这种优化。
busg9geu3#
您只计算标准ASCII而不计算等。不如
CommentText.ToCharArray().Where(c => Char.IsUpper(c)).Count()
wko9yo5t4#
不用测试我就说
int count = 0; foreach (char c in commentText) { if (Char.IsUpper(c)) count++; }
字符串更快,现在去测试一下。
cyej8jka5#
您对该代码所做的是创建一个包含字符的集合,然后创建一个仅包含大写字符的新集合,然后循环遍历该集合,以找出有多少个大写字符。这将执行得更好(但仍然不如普通循环),因为它不会创建中间集合:
CommentText.Count(c => Char.IsUpper(c))
字符串编辑:按照Matt的建议,也删除了ToCharArray调用。
vc9ivgsu6#
我来搞定
Regex x = new Regex("[A-Z]{1}", RegexOptions.Compiled | RegexOptions.CultureInvariant); int c = x.Matches(s).Count;
字符串但我不知道是不是特别快我猜也不会有特别的字符
编辑:
快速对比一下这个问题的答案。在vshost中调试,使用字符串进行10'000次迭代:
aBcDeFGHi1287jKK6437628asghwHllmTbynerA
6条答案
按热度按时间bjp0bcyl1#
好了,我只是敲了一些代码来计算你的方法的时间:
字符串
结果:
您的:19737滴答
我的:118滴答
差别很大啊!有时候,最直接的方式也是最有效的。
编辑
只是出于兴趣,这个:
型
在2500个滴答声左右。所以对于一个“Linqy”的一行程序来说,它是相当快的。
slsn1g292#
首先,没有理由需要调用
ToCharArray()
,因为假设CommentText
是一个字符串,它已经是一个IEnumerable<char>
了。其次,你应该调用char.IsUpper
,而不是假设你只处理ASCII值。代码应该看起来像,字符串
第三,如果你担心速度,没有什么可以击败旧的for循环,
型
一般来说,调用任何方法都会比内联代码慢,但只有当你绝对确定这是代码中的瓶颈时,才应该进行这种优化。
busg9geu3#
您只计算标准ASCII而不计算等。
不如
字符串
wko9yo5t4#
不用测试我就说
字符串
更快,现在去测试一下。
cyej8jka5#
您对该代码所做的是创建一个包含字符的集合,然后创建一个仅包含大写字符的新集合,然后循环遍历该集合,以找出有多少个大写字符。
这将执行得更好(但仍然不如普通循环),因为它不会创建中间集合:
字符串
编辑:按照Matt的建议,也删除了ToCharArray调用。
vc9ivgsu6#
我来搞定
字符串
但我不知道是不是特别快我猜也不会有特别的字符
编辑:
快速对比一下这个问题的答案。在vshost中调试,使用字符串进行10'000次迭代:
aBcDeFGHi1287jKK6437628asghwHllmTbynerA