Я хочу использовать take_while
на итераторе, а затем посчитать, сколько элементов в полученном итераторе. Вот простая игрушечная программа, которая демонстрирует, что я пытаюсь сделать:
fn main() {
let v = vec![1, 2, 3, 4, 5, 4, 3];
let num_before_five = v.iter().take_while(|&&x| x != 5).len();
println!("There are {} items before 5 occurs.", num_before_five);
}
(площадка Rust)
Когда я пытаюсь скомпилировать это, я получаю следующая ошибка:
error[E0599]: no method named `len` found for type `std::iter::TakeWhile<std::slice::Iter<'_, {integer}>, [closure@src/main.rs:3:47: 3:59]>` in the current scope
--> src/main.rs:3:61
|
3 | let num_before_five = v.iter().take_while(|&&x| x != 5).len();
| ^^^ method not found in `std::iter::TakeWhile<std::slice::Iter<'_, {integer}>, [closure@src/main.rs:3:47: 3:59]>`
Ошибка предполагает, что std::iter::TakeWhile
не имеет .len()
метода, который является истинным. Хотя произвольный итератор может никогда не завершиться, так как этот происходит от Vec
, я знаю, что он конечен. Я мог бы получить длину, считая ее в for
l oop, но, похоже, должен быть более идиоматический c способ сделать это в Rust.
Как я могу получить длину этого TakeWhile
?