.net字符串数组查找方式效率比较
下面是代码:
- 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 = ; 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("一千万次字符串数组元素查找:");
- System.Threading.Thread.Sleep();
- long ticks = DateTime.Now.Ticks;
- for (int i = ; i < ; i++)
- {
- CompareStringInArrar(inputStr, arr);
- }
- Console.WriteLine("自定义数组查找(Ticks): {0}", DateTime.Now.Ticks - ticks);
- ////////////////////////////////////////
- System.Threading.Thread.Sleep();
- ticks = DateTime.Now.Ticks;
- for (int i = ; i < ; i++)
- {
- FindStringInArrar0(ref findStr, arr);
- }
- Console.WriteLine("直接对象地址相等进行数组查找(Ticks):{0}", DateTime.Now.Ticks - ticks);
- ///////////////////////////////////
- System.Threading.Thread.Sleep();
- ticks = DateTime.Now.Ticks;
- for (int i = ; i < ; i++)
- {
- FindStringInArrar(ref inputStr, arr);
- }
- Console.WriteLine("直接遍历进行数组查找(Ticks): {0}", DateTime.Now.Ticks - ticks);
- ///////////////////////////////////
- System.Threading.Thread.Sleep();
- ticks = DateTime.Now.Ticks;
- for (int i = ; i < ; i++)
- {
- CompareStringInArrar2( inputStr, arr);
- }
- Console.WriteLine("混合数组查找(Ticks): {0}", DateTime.Now.Ticks - ticks);
- Console.Read();
- //DBMethod();
- }
- private static bool FindStringInArrar0(ref string inputStr, string[] arr)
- {
- for (int j = ; 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 = ; 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 = ; i < arr.Length; i++)
- {
- //strTemp = arr[i];
- if (length == arr[i].Length)
- {
- flag = true;
- for (int j = ; 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 = ; 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 = ; 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 = ;
- long ticks2 = ;
- long ticks3 = ;
- long ticks4 = ;
- long ticks5 = ;
- Stopwatch sw = Stopwatch.StartNew();
- //预热
- for (int i = ; i < ; i++)
- {
- bool b1 = string.Compare(A, B, StringComparison.OrdinalIgnoreCase) == ;
- }
- //开始
- sw.Reset();
- sw.Start();
- for (int i = ; i < ; i++)
- {
- bool b1 = string.Compare(A, D, StringComparison.OrdinalIgnoreCase) == ;
- }
- ticks = sw.ElapsedTicks;
- sw.Reset();
- sw.Start();
- for (int i = ; i < ; i++)
- {
- bool b2 = string.Equals(A, C, StringComparison.OrdinalIgnoreCase);
- }
- ticks2 = sw.ElapsedTicks;
- sw.Reset();
- sw.Start();
- for (int i = ; i < ; i++)
- {
- bool b2 = string.Equals(A, D, StringComparison.OrdinalIgnoreCase);
- }
- ticks3 = sw.ElapsedTicks;
- sw.Reset();
- sw.Start();
- for (int i = ; i < ; i++)
- {
- bool b2 = string.Equals(A, E, StringComparison.OrdinalIgnoreCase);
- }
- ticks4 = sw.ElapsedTicks;
- sw.Reset();
- sw.Start();
- for (int i = ; i < ; 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();
- }
- }
最后得出结论,最后一种方式最快,原因在于首先判断了长度,如果不是一样的长度直接跳过比较,下面是测试数据:
- input string(123Abc):
- 123Abc
- ,
- ,
- ,
- ,
.net字符串数组查找方式效率比较的更多相关文章
- Matlab 之 字符串数组查找
Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...
- JS 中的数组遍历方式效率比较
JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代码如下: ; j < ...
- 讨论下茴香逗的茴字有几种写法,javascript字符串数组查找“indexOf"的替代方式。
- 一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)
平时项目中有时需要用到在字符串中搜索两个或更多的关键字的情景.例如:将字符串"ab|cd#ef|"按竖线或者井号做分隔 如果是大项目,一般会采用正则表达式做处理.但有时写个小程序, ...
- c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式
char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...
- 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串
编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...
- Lua大量字符串拼接方式效率对比及原因分析
Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua字符串拼接消耗 https://blog.csdn.net/qq_26958473/article/detai ...
- 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ...
- [算法2-数组与字符串的查找与匹配] (.NET源码学习)
[算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法) 2. 字符串查找(算法) 3. C#中的String(源码) 4. 特性Attribute 与内 ...
随机推荐
- SQL Server的日期和时间类型
Sql Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1,秒的精度是指使用多少位小数表示秒 DateTime数据类型秒的精度是3,D ...
- Reporting Service 没有权限登陆
在配置好Reporting Service之后,登陆Report Mananger( http://localhost/Reports/Pages/Folder.aspx)出现一个异常,本地用户没有权 ...
- java中finally和return的执行顺序
注意:return的位置... 从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中 有re ...
- hdu1548 A strange lift(bfs 或Dijkstra最短路径)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #d ...
- UML类图学习
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- [python]进阶学习之阅读代码
起因 最近在公司的任务是写一些简单的运营工具,因为是很小的工具,所以就用了github上面的一个开源项目flask-admin,可以省去很多的事情. 但是,这个开源项目是个人维护的项目,所以文档相对简 ...
- Android系统目录介绍
src目录:完成对java代码的编写 assets目录: 资源目录 res目录: 图片,布局文件和字符串,菜单等文件 bin目录:输出文件夹 如生成的apk安装文件 project.propertie ...
- 【模式匹配】Aho-Corasick自动机
1. 多模匹配 AC自动机(Aho-Corasick Automaton)是多模匹配算法的一种.所谓多模匹配,是指在字符串匹配中,模式串有多个.前面所介绍的KMP.BM为单模匹配,即模式串只有一个.假 ...
- HTML5实现3D和2D可视化QuadTree四叉树碰撞检测
QuadTree四叉树顾名思义就是树状的数据结构,其每个节点有四个孩子节点,可将二维平面递归分割子区域.QuadTree常用于空间数据库索引,3D的椎体可见区域裁剪,甚至图片分析处理,我们今天介绍的是 ...