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

tsh*_*ang 7 rust

在下面的代码,我得到了相同的结果我是否使用lencount:

fn main() {
    let vector = [0, 1, 2];
    assert_eq!(vector.iter().count(), vector.iter().len());
}
Run Code Online (Sandbox Code Playgroud)

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

assert_eq!(vector.len(), 3);
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*nak 9

vector.len()

返回向量中的元素数.

iter.len()

返回迭代器的确切长度.

iter.count()

计算此迭代器中的元素数.

因此,虽然它们返回相同的值,但count实际上会计算元素.请注意,len仅适用于ExactSizeIterator; 因此,如果该值是惰性检索的,则可能无法获得总长度,您需要对其进行显式计数.

  • 如果我错了,请纠正我:两个 `len()` 方法都有恒定的时间复杂度,而 `count` 是线性的? (2认同)
  • @Genarito 一定是。文档说“此方法将重复调用 next 直到遇到 None”,因此调用次数随着元素数量线性增加 (2认同)