.NET LINQ内存数据操作:代码时间复杂度与遍历次数咨询
问题
假设elements是已加载到内存中的对象列表(非数据库查询),默认是泛型List,也可基于任意可迭代对象展开,核心关注点是LINQ表达式如何遍历内存数据结构。给出以下代码片段:
var filteredElements = elements.Where(el => el.Flag == true).Select(el.Id).ToList();
请问该行代码的时间复杂度是多少?elements会被遍历两次还是仅一次?
回答
- 时间复杂度:O(n),其中n是
elements集合的元素总数。整个操作只需要对集合做一次完整遍历,每个元素仅执行一次过滤判断,符合条件的元素直接提取Id,最终构建结果列表。 - 遍历次数:仅遍历一次。LINQ的
Where和Select属于延迟执行操作符,它们不会单独触发集合遍历,只有当终端操作(这里的ToList())执行时,才会一次性遍历原集合,同时完成过滤和投影操作——每取出一个元素,先判断是否满足Flag == true,满足就提取Id加入结果,全程只走一遍原集合。
内容的提问来源于stack exchange,提问作者hello-there
相关产品推荐
相关产品推荐

