len()和count()有什么区别?

41
在下面的代码中,无论我使用 len 还是 count,都会得到相同的结果:
fn main() {
    let vector = [0, 1, 2];
    assert_eq!(vector.iter().count(), vector.iter().len());
}

len 似乎更通用,因为我也可以这样做:

assert_eq!(vector.len(), 3);

那么,这两者之间有什么区别...为什么要使用其中一个而不是另一个呢?


我认为 count 实际上是计数,而 len 获取长度。 - Joshua Byer
1个回答

42

vector.len()

返回向量中元素的数量。

iter.len()

返回迭代器的确切长度。

iter.count()

计算此迭代器中元素的数量。

因此,虽然它们返回相同的值,但 count 实际上会对元素进行计数。注意,len 仅适用于 ExactSizeIterator;因此,如果值是惰性获取的,则可能无法获取总长度,需要明确计数。


.iter().len() 不会(立即)调用 Vec::len() - user395760
如果在懒加载的值上调用 .len(),它是否会在内部调用.count()? 编辑:或者对于这样的值,.len()甚至不存在? - anderspitman
1
iter.len() 是由一个 trait 提供的,因此在惰性值上它将不存在。 - Peter Uhnak
2
请纠正我如果我错了:len()方法和len属性的时间复杂度都是常数级别,而count方法的时间复杂度是线性的? - Genarito
2
@Genarito 必须是。文档中说:“此方法将重复调用next,直到遇到None为止”,因此调用次数随元素数量呈线性上升。 - kangalio
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接