下面是代码:

 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字符串数组查找方式效率比较的更多相关文章

  1. Matlab 之 字符串数组查找

    Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...

  2. JS 中的数组遍历方式效率比较

    JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代码如下: ; j < ...

  3. 讨论下茴香逗的茴字有几种写法,javascript字符串数组查找“indexOf"的替代方式。

  4. 一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)

    平时项目中有时需要用到在字符串中搜索两个或更多的关键字的情景.例如:将字符串"ab|cd#ef|"按竖线或者井号做分隔 如果是大项目,一般会采用正则表达式做处理.但有时写个小程序, ...

  5. c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式

    char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...

  6. 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串

    编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...

  7. Lua大量字符串拼接方式效率对比及原因分析

    Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua字符串拼接消耗 https://blog.csdn.net/qq_26958473/article/detai ...

  8. 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ...

  9. [算法2-数组与字符串的查找与匹配] (.NET源码学习)

    [算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法)   2. 字符串查找(算法)   3. C#中的String(源码)   4. 特性Attribute 与内 ...

随机推荐

  1. KnockoutJS 3.X API 第五章 高级应用(1) 创建自定义绑定

    您不仅限于使用内置的绑定,如click,value绑定等,您可以创建自己的绑定. 这是如何控制视图模型如何与DOM元素进行交互,并且为您提供了大量的灵活性,以便于以复用的方式封装复杂的行为. 注册绑定 ...

  2. angularJS之事件处理

    angularJS的事件不像js一样,会默认有冒泡和捕获,还有angularJS之间的同名控制器之间,也只是同名, 不会让他们关联起来,就是这个名字的控制器的数据的改变不会影响到另一个同名的控制器. ...

  3. 为大家分享一个 Ajax Loading —— spin.js

    我们在做Ajax 异步请求的时候,一般都会利用一个动态的 Gif 小图片来制作一个Ajax Loading ,以便增加用户体验. 今天在网上发现了一个 Spin.js ,该 js 脚本压缩后5k,可以 ...

  4. C#中string.format的格式和用法

    String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项. Str ...

  5. 20个设计精致的用户界面 PSD 源文件免费下载

    今天这篇文章收集了20个新鲜出炉的用户界面 PSD 源文件素材,你可以免费下载使用.这些免费素材不仅能帮助设计师们节省大量的时间,而且能有很好的效果.感谢那些很有才华的设计师分享它们的劳动成果,让更多 ...

  6. jQuery选择器(二)

    jQuery中有"过滤选择器",通过特定的规则来筛选出所需的DOM元素,都是以(:)开头的. $("div:first")//选取出所有<div>元 ...

  7. Redis发布订阅实现原理

    发布订阅中使用到的命令就只有三个:PUBLISH,SUBSCRIBE,PSUBSCRIBE PUBLISH 用于发布消息 SUBSCRIBE 也叫频道订阅,用于订阅某一特定的频道 PSUBSCRIBE ...

  8. 【原创】Kakfa log包源代码分析(二)

    八.Log.scala 日志类,个人认为是这个包最重要的两个类之一(另一个是LogManager).以伴生对象的方式提供.先说Log object,既然是object,就定义了一些类级别的变量,比如定 ...

  9. Unicode中文和特殊字符的编码范围

    编程中有时候需要用到匹配中文的正则,一般用 [ \u4e00-\u9fa5]+ 即可搞定.不过这正则对一般的火星文鸟语就不太适用了,甚至全角的标点符号都不包含在内.例如游戏里面的玩家名,普通青年一般都 ...

  10. ASP.NET Core WebAPI 开发-新建WebAPI项目

    ASP.NET Core WebAPI 开发-新建WebAPI项目, ASP.NET Core 1.0 RC2 即将发布,我们现在来学习一下 ASP.NET Core WebAPI开发. 网上已经有泄 ...