对判断值在数组中的索引3种方法的性能测试,附源码【原创】
/// 使用for循环判断
/// </summary>
/// <param name="str"></param>
/// <param name="Num"></param>
/// <returns></returns>
private static int MetFor(string[] str, string Num)
{
for (int i = 0; i < str.Length; i++)
{
if (str[i] == Num)
{
return i;
}
}
return -1;
}
/// <summary>
/// 使用递归循环方法判断
/// </summary>
/// <param name="str"></param>
/// <param name="Num"></param>
/// <returns></returns>
private static int MetRecursion(string[] str, string Num, int i)
{
if (i > str.Length)
{
return -1;
}
if (str[i] == Num)
{
return i;
}
i++;
return MetRecursion(str, Num, i);
}
/// <summary>
/// 使用Linq查询
/// </summary>
/// <param name="str"></param>
/// <param name="Num"></param>
/// <returns></returns>
private static int MetNinq(string[] str, string Num)
{
///使用Linq查询,将索引和值查出来,
///新建一个匿名类,属性包括 aa bool类型,和 Index 索引
var tt = str.Select((num, index) => new
{
aa = (Num == num),
Index = index
});
//将得到的输出结果进行判断,查找 aa为true的索引值
//最后成功得到它的索引
int number = tt.Where(n => n.aa == true).Last().Index;
return number;
}
---------------------------------------------------------------------------------性能测试结果对数组存在 110000条数据进行测试
在同一台配置的计算机上:
使用for循环判断速度最快!
耗时约:16毫秒
使用 Linq查询,速度一般!
耗时约: 25毫秒
使用 递归判断!(OFF,>>>直接服务停止>>>>)
原文来自:http://hi.baidu.com/xiaowei0705/blog/item/d952f033de6e820febc4af82.html