下面是代码:

 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. 找到SQL Server数据库历史增长信息

        很多时候,在我们规划SQL Server数据库的空间,或向存储方面要空间时,都需要估算所需申请数据库空间的大小,估计未来最简单的办法就是看过去的趋势,这通常也是最合理的方式.     通常来讲 ...

  2. 邻接矩阵无向图(三)之 Java详解

    前面分别介绍了邻接矩阵无向图的C和C++实现,本文通过Java实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:h ...

  3. Hadoop阅读笔记(四)——一幅图看透MapReduce机制

    时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...

  4. Zip文件中文乱码问题解决方法(MAC->Windows)

    前言: 最近收到的ZIP交互原型,打开查看中文一堆乱码.主要是产品都是高大上啊,用的都是MAC,咱酷毙用的Windows,话说安卓APP,你用MAC搞啥啊.可恨的压缩用的是zip,不是rar之类的.为 ...

  5. sublime Text3使用笔记

    转载:http://blog.csdn.net/u012771929/article/details/30030249 目录: 1.setting 安装插件,package control ,Emme ...

  6. Swift 3.0首个开发者预览版将在5月12日释出

    Swift团队在博客中宣布Swift 3.0语言首个开发者预览版将于5月12日释出,正式版将在4-6周之后推出.开发者预览阶段并无确定的更新周期和计划,不过Swift团队称努力将其控 制在4-6周内. ...

  7. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  8. Android开发中遇到的requestFeature() must be called before adding content异常

    缘起 上一篇博文中讲到了几种实现全屏显示Activity内容的方法.然而实际在实现中发现了一些问题,在本篇博文中进行总结下.首先交代一下开发环境,本人使用的是Android Studio 1.5.1, ...

  9. 功能更新到 Windows 10 企业版, 版本 1607

    功能更新到 Windows 10 企业版, 版本 1607

  10. 【转载】[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类

    关键代码: using System; using System.Collections; using System.Collections.Generic; using System.Compone ...