对此效率的任何想法?...
CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
Matt Hamilto.. 35
好吧,只是敲了一些代码来计算你的方法:
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"单行程来说它很快.
好吧,只是敲了一些代码来计算你的方法:
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"单行程来说它很快.
首先,没有理由需要调用,ToCharArray()
因为假设CommentText
它是一个字符串,它已经是一个字符串IEnumerable
.其次,您可能应该调用char.IsUpper
而不是假设您只处理ASCII值.代码应该看起来像,
CommentText.Count(char.IsUpper)
第三,如果你担心速度,没有太多可以击败旧的for循环,
int count = 0; for (int i = 0; i < CommentText.Length; i++) if (char.IsUpper(CommentText[i]) count++;
一般来说,调用任何方法都会比内联代码慢,但只有在你完全确定这是代码中的瓶颈时才应该进行这种优化.