前段时间在开发的过程中遇到这样一个问题,分别有两个List集合,其中一个为固定列表,另一个需要动态加载。最终结果需要对动态列表进行筛选,保留每个元素开头包含在固定列表中。

下面我以NBA球队为例,给定一个固定的球队列表:

var teamList = new List<string> { "湖人","凯尔特人","快船","雷霆","勇士",};

目前我有一个动态加载的球员名单(由于下文需要测试效率,所以添加的样本比较多):

var playerNameList = new List<string> {"湖人-科比","快船-保罗乔治","湖人-勒布朗","凯尔特人-塔图姆","勇士-汤普森","雷霆-维斯布鲁克","凯尔特人-杰伦布朗","快船-雷吉杰克逊","快船-莱昂纳德","马刺-邓肯","马刺-吉诺比利","马刺-波波维奇","雷霆-杜兰特","湖人-安东尼","雷霆-哈登","勇士-库里","勇士-格林","湖人-加索尔","快船-伊巴卡","凯尔特人-斯玛特","湖人-安东尼戴维斯","火箭-姚明","开拓者-利拉德","公牛-德罗赞","掘金-约基奇","雄鹿-字母哥","篮网-欧文","尼克斯-兰德尔","热火-韦德","太阳-保罗",};

想要快速获取到给定球队名单中每个球队都有哪些球员,首先我们可以通过for循环的方式实现:

var retList = new List<string>();
​
var startTime = DateTime.Now;
​
Console.WriteLine($"foeach开始时间:{ startTime}");
foreach (var item in teamList)
{retList.AddRange(playerNameList.Where(r => r.StartsWith(item)));
}
var endTime = DateTime.Now;
Console.WriteLine($"foreach结束时间:{ endTime}");
foreach (var item in retList)
{Console.WriteLine(item);
}
Console.WriteLine($"耗时:{endTime - startTime}");

输出结果如下:

foreach循环虽然可以完美实现,但是在使用linq的时候我们要做到尽量简洁,并且foreach的效率比较底下,linq也提供给我们StartWith()方法,具体写法如下:

var startTime = DateTime.Now;
Console.WriteLine($"linq开始时间:{ startTime}");
var retList = playerNameList.Where(w => teamList.Any(a => w.StartsWith(a))).ToList();
var endTime = DateTime.Now;
Console.WriteLine($"linq结束时间:{ endTime}");
foreach (var item in retList)
{Console.WriteLine(item);
}
Console.WriteLine($"耗时:{endTime - startTime}");

输出结果如下:

精华代码:

var retList = playerNameList.Where(w => teamList.Any(a => w.StartsWith(a))).ToList();

我们再来对比下foreach和linq实现的效率:

虽然样本并不大,但很明显可以看出StartWith()的效率要远高于for循环,并且代码既干净又清爽。以上。

一个简单知识点分享给大家,破天荒头一回更新,希望各位大佬多多包涵!!!

在c#中,筛选一个List中的每个元素的开头或结尾是否包含另一个List的元素(StartWith()的使用)...相关推荐

  1. python中筛选内容_Python中数据筛选代码实现

    数据筛选 使用与.或.非三个条件配合大于.小于.等于对数据进行筛选,并进行计数和求和. 1.使用"与"进行筛选 df_inner.loc[(df_inner['age'] > ...

  2. 【网络安全】如何使用PacketSifter从pcap中筛选出有用的信息

    关于PacketSifter PacketSifter这款工具旨在帮助广大研究/分析人员从捕捉到的数据包文件(pcap)中筛选出其中有价值或值得分析的流量数据.PacketSifter可以接受一个pc ...

  3. java中super关键字_Java中关键字super与this的区别

    一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象.怎么去引 ...

  4. dataframe筛选数据根据某一个列的数据在另外的一个数组中

    对dataframe中的数据进行筛选.想要根据某一列的数据比如要在另外的一个数组中,这时,就需要用到dataframe中比较经典的函数了isin()函数. 函数会返回一个bool型的dataframe ...

  5. 如何从一个大规模的文本中筛选出符合条件的记录

    现在是大数据时代.尤其是互联网企业,任何一个人都有可能拿到一份庞大的数据.不管你是否具有数据处理的能力,你都要面对它. 面对突如其来的一份庞大的数据,该怎样来对付它呢?这时候用SqlCel正是一个非常 ...

  6. 图片名字存在txt文件中,从另一个装有图片的文件夹中筛选对应的图片。python代码

    txt文件的每一行都存一张图片的名字(带尾缀),从另一个存有全部图片的文件中筛选txt中存在的图片. # -*- coding: UTF-8 -*- # !/usr/bin/env python im ...

  7. 10.8 UiPath 数据筛选Filter Data Table的介绍和使用(Excel数据写入另一个Excel中)

    UiPath数据筛选Filter Data Table的介绍和使用 一.数据筛选(Filter Data Table)的介绍 二.Filter Data Table在UiPath中的使用 ) 一.数据 ...

  8. js从一个数组中筛选出另一个数组中存在的值

    js从一个数组中筛选出另一个数组中存在的值 这里从arr中筛选arr1中存在的值,arr2为筛选结果数组 let arr=["1","2","3&qu ...

  9. 以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...

    学习Excel技术,关注微信公众号: excelperfect Q:如下图1所示,一个名为"InputFile.csv"文件,每行有6个数字,每个数字使用空格分隔开. 图1 现在, ...

最新文章

  1. PyTorch or TensorFlow?强力推荐PyTorch不是没有理由的!一文学透pytorch!
  2. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法
  3. 二叉树建立及中序遍历C++语言实现
  4. arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
  5. JAVA实现图的邻接表以及DFS
  6. 万年历用c语言写,用C语言如何编写“万年历”
  7. 全球六大国际域名解析量:.COM第一 环比净增31.5万
  8. Java遍历Map集合的几种方式
  9. win10网卡驱动问题
  10. [SDOI2016]征途
  11. win10电脑不显示手机连接服务器失败,技术员教你解决win10系统手机连接不上电脑没反应的操作办法...
  12. 〖数学算法〗开平方的七种算法
  13. JS实现类似打字的特效,JS实现打字效果
  14. 解决你的R语言乱码问题
  15. 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件
  16. 普通人创业,不开实体店或者网上店铺,你能干啥?
  17. Linux那些事儿之我是U盘(5)外面的世界很精彩
  18. 无线自组网AODV路由机制matlab仿真
  19. python爬虫《向往的生活》豆瓣短评,来看看Henry大华的路人评价变化~
  20. 鼠标右键,以管理员身份在当前目录打开命令行窗口

热门文章

  1. laravel入门教程
  2. 实战各大平台商品比价--Python 爬取过客网商品历史价格(30天)
  3. 力扣--初级算法-1
  4. Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(五)
  5. Mac Endnote 20使用
  6. 腾讯云ubuntu20.04,免密登录,安装anaconda,并安装远程jupyter notebook,TensorFlow
  7. 微软e5服务器,微软发布Office 365 E5计划
  8. Git/Github工作流 (workflow)
  9. (转)私募基金机构设立、牌照申请、后续运营的最新政策规定和操作流程
  10. 一阶谓词与一元谓词的区别