.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 与内 ...
随机推荐
- DELPHI支付宝支付代码
真实业务场景的考虑 按照支付宝或者微信支付的开发手册的说法,一个标准的客户端接入支付业务模型应该是这样的,我忽略时序图,只用文字描述: 用户登录客户端,选择商品,然后点击客户端支付. 客户端收集商品信 ...
- 使用SQL Server Audit记录数据库变更
最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC. ...
- 信息加密之非对称加密算法RSA
前面为大家已经总结了,基于密钥交换的DH算法,现在就为大家再介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1.公钥加密,私钥解密:2.私钥加密,公钥解密.下面就为大家分析一下实现代码, ...
- java中匿名类的注意细节
abstract class Outer{ int num; public Outer(int x){ num = x; } public abstract void show1(); public ...
- 【总结】探索Newlife组件:服务代理利器XAgent的前世今生
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www.cn ...
- Razor基本语法
前言: Razor引擎的核心是识别@符号及尖括号: 1.<...></...> 2.<.../> [之所以说是"尖括号"而非& ...
- Android 软键盘弹出时把原来布局顶上去的解决方法
键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity android:name=& ...
- Javascript: 从prototype漫谈到继承(2)
本文同时也发表在我另一篇独立博客 <Javascript: 从prototype漫谈到继承(2)>(管理员请注意!这两个都是我自己的原创博客!不要踢出首页!不是转载!已经误会三次了!) 上 ...
- Windows Azure Web Site (12) Azure Web Site配置文件
<Windows Azure Platform 系列文章目录> 本文将介绍如何在Azure Web Site里配置连接字符串. 本文分为以下几个步骤: 1.在本地ASP.NET项目使用W ...
- 从零开始学习jQuery (一) 入门篇
本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些 ...