我有两种方法可以获取一个字符串并删除任何“无效”字符(哈希集中包含的字符)。一种方法使用 Linq.Where,另一种方法使用带字符数组的循环。
Linq 方法花费的时间(208756.9 滴答声)几乎是循环(108688.2 滴答刻)的两倍
林克:
string Linq(string field)
{
var c = field.Where(p => !hashChar.Contains(p));
return new string(c.ToArray());
}
环形:
string CharArray(string field)
{
char[] c = new char[field.Length];
int count = 0;
for (int i = 0; i < field.Length; i++)
if (!hashChar.Contains(field[i]))
{
c[count] = field[i];
count++;
}
if (count == 0)
return field;
char[] f = new char[count];
Buffer.BlockCopy(c, 0, f, 0, count * sizeof(char));
return new string(f);
}
我的期望是 LINQ 会击败或者至少可以与循环方法相媲美。循环方法甚至没有优化。我一定在这里遗漏了一些东西。
Linq.Where 如何在幕后工作,为什么它会输给我的方法?