我的第一个实现想法是简单地做:
bool hasUpperCase (string str) {
if(string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++) {
if (char.IsUpper (str[i]))
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但也许还有另一种更快的方法吗?
Fem*_*ref 40
你可以减少到
bool HasUpperCase (string str) {
return !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ.
bool hasUpperCase (string str) {
if(string.IsNullOrEmpty(str))
return false;
return str != str.ToLower();
}
Run Code Online (Sandbox Code Playgroud)
好的 - 新的真相的时间!
这是对字符串中任何大写字符的测试.
保证字符串在前60K字符内没有任何大写字符.(我从random.org创建了字符串)
我通过随机化传递给测试函数的64K字符串来阻止编译器中的字符串替换优化.
所有时间都非常严格地围绕实际测试,并且不包括函数调用时间.
我测试了一次,10次,然后再次测试10,000次,并对每次测试的每组时间进行平均.
我使用i3-2100 CPU @ 3.1 Ghz在64位Win 7上运行测试
测试案例1:
static bool testCaseOne(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
result = !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Run Code Online (Sandbox Code Playgroud)
平均时间:
测试案例2:
static bool testCaseTwo(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
result = Regex.IsMatch(str, "[A-Z]");
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Run Code Online (Sandbox Code Playgroud)
平均时间:
测试案例3:
static bool testCaseThree(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (char.IsUpper(str[i]))
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Run Code Online (Sandbox Code Playgroud)
平均时间:
测试案例4:
static bool testCaseFour(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] > 64 && str[i] < 91)
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
平均时间:
有趣.
我希望这对RK先生表示满意;)
| 归档时间: |
|
| 查看次数: |
22851 次 |
| 最近记录: |