对判断值在数组中的索引3种方法的性能测试,附源码【原创】

     /// <summary>
        /// 使用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
posted on 2011-04-13 16:45  xiaowei0705  阅读(442)  评论(0编辑  收藏  举报