c# - .Where(x=> x.listFoos.Count() > 1) 是否计算所有子元素?
问题描述
给定一个具有 List 类型属性的对象列表:
class Bar{
public List<Foo> Foos{get;set;}
}
以下代码会选择所有包含多个 Foo 的条形图吗?
或者它会在 2 Foos 处停止迭代吗?
var input = new List<Bar>();
var result = input.Where(x=> x.Foos.Count()>1).ToList();
解决方案
它不会计算任何东西。List<T>
冗余存储元素的数量,因此访问Count
属性是一个O(1)
操作。
即使您使用Enumerable.Count()
扩展方法而不是List<T>
s 内置Count
属性,这也有效,因为如果底层数据源实现Enumerable.Count()
了内置优化ICollection<T>
。
正如评论中的 Enigmativity 所提到的:如果您有一个不是IEnumerable的IEnumerable ,则ICollection<T>
可以使用以下命令来防止迭代整个可枚举:
var result = input.Where(x => x.Foos.Skip(1).Any()).ToList();
推荐阅读
- hibernate - SpringBoot Data - 如何删除所有共享 id 的行?
- google-compute-engine - 每台机器的最大外部 IP 地址数?
- python-3.x - ModuleNotFoundError:没有名为“cx_Oracle”的模块
- html5-canvas - 如何在 html5 画布中绘制这个?
- swift - 从使用 CoreData 创建的 mapView 中删除 pin
- java - 从容器访问 docker API
- python - 在 Python 3.7 中 Counter / defaultdict 如何排序?
- xml - 带有 if 语句的 Xsl + 向变量添加内容
- c - 决定 setgroups() 和 initgroups() 必须由超级用户调用的机制是什么?
- jq - jq:传递变量参数以用作过滤器