2015-04-07 3 views
4

В коде ниже, я получаю тот же результат, использовать ли я len или count:В чем разница между len() и count()?

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

len кажется более универсальным, так как я могу также сделать это:

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

Итак, в чем разница между два ... зачем использовать один, а не другой?

+0

Я думаю, что счетчик фактически подсчитывает и len извлекает длину –

ответ

5

vector.len()

Возвращает количество элементов в векторе.

iter.len()

Возвращение точная длина итератора.

iter.count()

подсчитывает число элементов в этом итератора.

Так что, пока они возвращают то же значение, count фактически подсчитает элементы. Обратите внимание, что len доступен только для ExactSizeIterator; поэтому, если значение является ленивым, общая длина может быть недоступна, и вам нужно явно подсчитать ее.

+0

'.iter(). Len()' не (сразу) вызывает 'Vec :: len()'. – delnan

+0

Да, я неправильно читаю 'iter(). Len()', спасибо, что указали это. –

+0

Итак, если вы вызываете '.len()' на ленивом значении, он будет вызывать '.count()' внутренне? EDIT: Или бы '.len()' даже не существовало для такого значения? – anderspitman

Смежные вопросы