C# for 循环中如何更高效的筛选另一个集合的数据

2022-05-11

说明

本文介绍 FirstOrDefault、Where 基本用法,并介绍一下 for 循环中如何更高效的筛选另一个集合的数据,重点在后半部分

提前剧透,总的来说就是避免在for循环中使用 FirstOrDefault 或者 Where 去筛选B集合的数据,应该在 for 循环外部,对B集合进行分组筛选并装入字典 Dictionary 中,后续在 for 循环中使用相应的 Key 从字典中取值即可

FirstOrDefault基本用法

取集合中第一个符合条件的元素,若未指定条件则默认取第一个元素

若集合长度为零即没有数据或未找到一个符合条件的元素,则返回 Default(T) 即相应类型的默认值

执行结果如下:

image-20220511143755258

Where基本用法

取集合中所有符合条件的元素

若集合长度为零即没有数据或未找到一个符合条件的元素,则返回空集合

优化案例

数据准备

新建 Student、Score 类

初始化Student、Score数据,并保存至桌面txt中

FirstOrDefault 匹配查询单个数据

如将学生的信息显示为指定语文成绩

1.先执行优化前的代码,处理 1w 条数据

image-20220511162318337

2.先执行优化后的代码,处理 1w 条数据

image-20220511162358000

3.先执行优化前的代码,处理 5w 条数据

image-20220511162923737

4.先执行优化后的代码,处理 5w 条数据

image-20220511163325034

执行了四次,我们可以看到这种方式对 FirstOrDefault 优化提升的效果是非常明显的,数据越多越受用

Where匹配查询数据

如将学生的信息显示为指定各科成绩,并显示总数

1.先执行优化前的代码,处理 1w 条数据

image-20220511170614272

2.先执行优化后的代码,处理 1w 条数据

image-20220511170529343

3.先执行优化前的代码,处理 5w 条数据

image-20220511165406706

4.先执行优化后的代码,处理 5w 条数据

image-20220511170335906

执行了四次,我们可以看到这种方式对 Where 优化提升的效果同样是非常明显的,数据越多越受用

多字段分组(题外话)

如按照学生性别、年龄进行分组