国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

.net字符串數(shù)組查找方式效率比較

2019-11-14 16:09:04
字體:
供稿:網(wǎng)友

下面是代碼:

 static void Main(string[] args)        {            string[] arr = new string[] { "AAA", "BBBB", "CCCC", "DDDD", "EEEEEE", "ffffff", "ggggggg", "hhhhhh", "iii", "", "jjj", "kkk" };            string findStr = "kkk";            for (int i = 0; i < arr.Length; i++)            {                if (object.ReferenceEquals(findStr, arr[i]))                    Console.Write(" true1 ");            }            Console.WriteLine();            Console.Write("input string kkk :");            string inputStr = Console.ReadLine();            if (CompareStringInArrar( inputStr, arr))            {                Console.WriteLine(" true2 ");            }            ///////////////////////            Console.WriteLine("一千萬次字符串數(shù)組元素查找:");            System.Threading.Thread.Sleep(3000);            long ticks = DateTime.Now.Ticks;            for (int i = 0; i < 10000000; i++)            {                CompareStringInArrar(inputStr, arr);            }            Console.WriteLine("自定義數(shù)組查找(Ticks):              {0}", DateTime.Now.Ticks - ticks);            ////////////////////////////////////////            System.Threading.Thread.Sleep(3000);            ticks = DateTime.Now.Ticks;            for (int i = 0; i < 10000000; i++)            {                FindStringInArrar0(ref findStr, arr);            }            Console.WriteLine("直接對象地址相等進行數(shù)組查找(Ticks):{0}", DateTime.Now.Ticks - ticks);            ///////////////////////////////////            System.Threading.Thread.Sleep(3000);            ticks = DateTime.Now.Ticks;            for (int i = 0; i < 10000000; i++)            {                FindStringInArrar(ref inputStr, arr);            }            Console.WriteLine("直接遍歷進行數(shù)組查找(Ticks):        {0}", DateTime.Now.Ticks - ticks);            ///////////////////////////////////            System.Threading.Thread.Sleep(3000);            ticks = DateTime.Now.Ticks;            for (int i = 0; i < 10000000; i++)            {                CompareStringInArrar2( inputStr, arr);            }            Console.WriteLine("混合數(shù)組查找(Ticks):                {0}", DateTime.Now.Ticks - ticks);                      Console.Read();            //DBMethod();        }        PRivate static bool FindStringInArrar0(ref string inputStr, string[] arr)        {            for (int j = 0; j < arr.Length; j++)            {                if (object.ReferenceEquals(inputStr, arr[j]))                    return true;            }            return false;        }        private static bool FindStringInArrar(ref string inputStr, string[] arr)        {            for (int j = 0; j < arr.Length; j++)            {                if (inputStr == arr[j])                    return true;            }            return false;        }        private static bool CompareStringInArrar( string inputStr, string[] arr)        {            //char[] inputCharArr = inputStr.ToCharArray();            int length = inputStr.Length;            bool flag = true;            //string strTemp = null;            for (int i = 0; i < arr.Length; i++)            {                //strTemp = arr[i];                if (length == arr[i].Length)                {                    flag = true;                    for (int j = 0; j < length; j++)                    {                        if (inputStr[j] != arr[i][j])                        {                            flag = false;                            break;                        }                    }                    if (flag)                        return true;                }            }            return false;        }        /// <summary>        /// 混合查找        /// </summary>        /// <param name="inputStr"></param>        /// <param name="arr"></param>        /// <returns></returns>        private static bool CompareStringInArrar2(string inputStr, string[] arr)        {            //char[] inputCharArr = inputStr.ToCharArray();            int length = inputStr.Length;            bool flag = true;            //string strTemp = null;            for (int i = 0; i < arr.Length; i++)            {                if (object.ReferenceEquals(inputStr, arr[i]))                    return true;                //strTemp = arr[i];                if (length == arr[i].Length)                {                    flag = true;                    for (int j = 0; j < length; j++)                    {                        if (inputStr[j] != arr[i][j])                        {                            flag = false;                            break;                        }                    }                    if (flag)                        return true;                }            }            return false;        }

 

但是通常比較都需要忽略大小寫比較,所以不能單純使用這種方式比較,用下面的測試代碼:

class Program    {        static void Main(string[] args)        {            string A = "124Abc";            string B = "2345b";            string C = "124abce";            Console.WriteLine("input string(123Abc):");            string D = Console.ReadLine();            string E = "124Abc";            long ticks = 0;            long ticks2 = 0;            long ticks3 = 0;            long ticks4 = 0;            long ticks5 = 0;                        Stopwatch sw = Stopwatch.StartNew();            //預(yù)熱            for (int i = 0; i < 1000000; i++)            {                bool b1 = string.Compare(A, B, StringComparison.OrdinalIgnoreCase) == 0;            }            //開始            sw.Reset();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                bool b1 = string.Compare(A, D, StringComparison.OrdinalIgnoreCase) == 0;            }            ticks = sw.ElapsedTicks;            sw.Reset();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                bool b2 = string.Equals(A, C, StringComparison.OrdinalIgnoreCase);            }            ticks2 = sw.ElapsedTicks;            sw.Reset();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                bool b2 = string.Equals(A, D, StringComparison.OrdinalIgnoreCase);            }            ticks3 = sw.ElapsedTicks;            sw.Reset();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                bool b2 = string.Equals(A, E, StringComparison.OrdinalIgnoreCase);            }            ticks4 = sw.ElapsedTicks;            sw.Reset();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                bool b2 = A.Length== C.Length && string.Equals(A, C, StringComparison.OrdinalIgnoreCase);            }            ticks5 = sw.ElapsedTicks;            Console.WriteLine("{0},/r/n{1},/r/n{2},/r/n{3},/r/n{4}/r/n", ticks, ticks2, ticks3, ticks4, ticks5);            Console.Read();        }    }

最后得出結(jié)論,最后一種方式最快,原因在于首先判斷了長度,如果不是一樣的長度直接跳過比較,下面是測試數(shù)據(jù):

input string(123Abc):123Abc87806,15255,58227,7569,1939

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洪雅县| 武穴市| 鄂尔多斯市| 高雄市| 巫溪县| 唐河县| 玛纳斯县| 甘肃省| 西平县| 兴和县| 东至县| 大渡口区| 汉沽区| 福贡县| 常熟市| 柞水县| 辉南县| 曲靖市| 赞皇县| 周宁县| 巴里| 合水县| 孝义市| 富锦市| 鹤庆县| 松原市| 剑川县| 长泰县| 太康县| 河北省| 永登县| 当涂县| 陇川县| 萝北县| 张北县| 邵阳县| 无锡市| 兴国县| 浦江县| 武安市| 剑阁县|