我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,。

var str=",1,2,3,33,22,123,";

一般有几种方式:

1、str.IndexOf(",3,")>=0

2、str.Contains(",3,")

有可能我们不用字符串而用List来存,判断list中是否存在3

var list = str.Split(',').ToList();

3、list.Contains("3");

4、List.Any(t=>t=="3");

接下来就验证一下上面4种方案究竟哪种效率最高?

public void Test(){var str = "article.add,article.update,article.delete,article.view," +"category.add,category.update,category.delete,category.view," +"user.add,user.update,user.delete,user.view," +"role.add,role.update,role.delete,role.view," +"news.add,news.update,news.delete,news.view," +"category.add,category.update,category.delete,category.view," +"Threading.add,Threading.update,Threading.delete,Threading.view," +"System.add,System.update,System.delete,System.view," +"Generic.add,Generic.update,Generic.delete,Generic.view," +"Collections.add,Collections.update,Collections.delete,Collections.view," +"Tasks.add,Tasks.update,Tasks.delete,Tasks.view," +"CslApp.add,CslApp.update,CslApp.delete,CslApp.view";var list = str.Split(',').ToList();var str1 = "Tasks2.view"; //这里查询一个不存在的字符串,这样更费时,如果字符串存在,话费的时间要少些。var count = 100000;Stopwatch sw = new Stopwatch();sw.Start();//耗时巨大的代码for (int i = 0; i < count; i++){if (str.Contains(str1)) { }}sw.Stop();TimeSpan ts = sw.Elapsed;Console.WriteLine("string.contains总共花费{0}ms.", ts.TotalMilliseconds);Stopwatch sw2 = new Stopwatch();sw2.Start();//耗时巨大的代码 for (int i = 0; i < count; i++){if (list.Contains(str1)) { }}sw2.Stop();TimeSpan ts2 = sw2.Elapsed;Console.WriteLine("List.Contains总共花费{0}ms.", ts2.TotalMilliseconds);Stopwatch sw3 = new Stopwatch();sw3.Start();//耗时巨大的代码 for (int i = 0; i < count; i++){if (list.Any(t=>t == str1)) { }}sw3.Stop();TimeSpan ts3 = sw3.Elapsed;Console.WriteLine("List.Any总共花费{0}ms.", ts3.TotalMilliseconds);Stopwatch sw4 = new Stopwatch();sw4.Start();//耗时巨大的代码 for (int i = 0; i < count; i++){if (str.IndexOf(str1)>=0) { }}sw4.Stop();TimeSpan ts4 = sw4.Elapsed;Console.WriteLine("string.IndexOf总共花费{0}ms.", ts4.TotalMilliseconds);}

  这里分别循环十万次来测试,得到的结果:

可以看出,IndexOf >=0这种方式简直是灾难性的存在,

效率最高的是将字符串转成List在用List.Contains判断,

List.Any查询效率都远不如string.Contains和List.Contains。

下面运行100万次的结果,由于indexof效率实在太差太费时间,就去掉了这个判断,

可见,转换成List在用list.Contains判断效率是最高的。

转载于:https://www.cnblogs.com/hpnet/p/8345632.html

判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...相关推荐

  1. java 判断 中文字符_java中判断字符串中是否有中文字符

    package com.meritit.test; public class TestChart { public static void main(String[] args) throws Exc ...

  2. php的strpos不支持数字,php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创...

    php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创 这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来! PHP 开源脚本语言 PHP(外文名: Hypertext Prep ...

  3. java判断字符串中是否包含某个字符

    1 使用String类的contains()方法 contains()方法用于判断字符串中是否包含指定的字符或字符串.语法如下: public boolean contains(CharSequenc ...

  4. 判断字符串中的括号是否匹配-C语言

    判断字符串中的括号是否匹配-C语言 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- #include <stdio.h> #include <s ...

  5. 判断字符串中的字符是否全都不同(字符类算法)

    判断字符串中的字符是否全都不同? 有两种方法可以实现: 第一种就是遍历字符数组,比较字符 第二种就是将字符转化为ASCII码,ascII码理论上只有256个字符 如果字符长度大于256那么,必定是会有 ...

  6. java 判断是否是小数_判断字符串中是否是整数和小数的方法

    判断字符串中是否是整数和浮点数的方法有几种方式,下面分别介绍: 1.用JAVA自带的函数,判断是否为整数 public static boolean isNumeric(String str) { f ...

  7. java 包含汉字,【转载】Java判断字符串中是不是包含汉字

    [转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...

  8. java判断字符串中是否包含中文 过滤中文

    package com.test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class Test {@ ...

  9. php html中的判断,php怎么判断字符串中是否包含html标签?

    php判断字符串中是否包含html标签的方法:首先使用"strip_tags"函数处理字符串:然后使用if语句判断处理后的字符串"str2"和原字符串" ...

  10. 判断字符串中的括号是否匹配——c和c++实现

    判断字符串中的括号是否匹配 递归实现:  先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配--  代码如下: #include <stdio.h> #include & ...

最新文章

  1. 10个重要问题概览Transformer全部内容
  2. laravel创建新model数据的两种方法
  3. flask 返回html json 并让ios 安卓接收
  4. 深度理解do{} while(0)语句的作用
  5. php 读取文件fread,PHP: 读取文件 fgets 和 fread 的差异
  6. android 控件方向旋转90度,android – 旋转视图层次90度
  7. poi java 其他_让POI架起Java与Office之间的桥梁一
  8. 打开d盘由于这台计算机的限制,又出现限制我想打开D盘、E盘,就是打不开,电脑提示:限制本 爱问知识人...
  9. springboot开发(yml配置和注解解析)
  10. java地图源码_Java集合源码分析(四)HashMap
  11. win32开发(图形绘制)
  12. 【Java从0到架构师】Spring - 整合 MyBatis
  13. Latex下载和使用
  14. DHCP Relay 配置教程
  15. Django setting ALLOWED_HOSTS
  16. Python +SQL Server 框架及返回结果处理
  17. 分享个人收集或整理的word中常用的vba代码
  18. (六)高德地图之驾车路线规划
  19. Python 列表数据类型(list)[学习 Python 必备基础知识][看此一篇就够了]
  20. 高校图书馆环境监控系统解决方案

热门文章

  1. [linux]centos6.3安装flash插件rpm方式
  2. docker启动tomcat容器并添置项目首页
  3. centos通过yum的方式快速安装jdk1.8
  4. WorkFlow入门Step.3—Adding Procedural Elements-For...
  5. SQL注入如何进行攻击
  6. 程序员更像艺术家 哪种状态更具创造性?
  7. 2018年php还是python好_2018年PHP还值得学习吗?
  8. ArcGIS制图表达Representation-规则和几何效果
  9. spring.net与OracleODP结合时发生的版本问题
  10. Go 1.8中值得关注的几个变化