[英]Fastest way to count number of uppercase characters in c#
對此效率的任何想法? ...
CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
好吧,只是敲了一些代碼來計算你的方法:
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>
。 其次,您可能應該調用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++;
一般來說,調用任何方法都會比內聯代碼慢,但只有在你完全確定這是代碼中的瓶頸時才應該進行這種優化。
你只計算標准的ASCII而不是ÃÊÊ等。
怎么樣
CommentText.ToCharArray().Where(c => Char.IsUpper(c)).Count()
我甚至沒有測試
int count = 0;
foreach (char c in commentText)
{
if (Char.IsUpper(c))
count++;
}
現在更快,現在測試它。
您使用該代碼所做的是創建一個包含字符的集合,然后創建一個僅包含大寫字符的新集合,然后循環遍歷該集合,以找出有多少。
這將表現得更好(但仍然不如普通循環那么好),因為它不會創建中間集合:
CommentText.Count(c => Char.IsUpper(c))
編輯:也刪除了ToCharArray調用,如Matt建議的那樣。
我有這個
Regex x = new Regex("[A-Z]{1}",
RegexOptions.Compiled | RegexOptions.CultureInvariant);
int c = x.Matches(s).Count;
但我不知道它是否特別快。 我也不會得到特殊的字符
編輯:
快速比較這個問題的答案。 在vshost中調試,使用字符串進行10'000次迭代:
aBcDeFGHi1287jKK6437628asghwHllmTbynerA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.