有一种有效的方法来为可变迭代器执行drop_while
吗?
单独使用 .take_while()
是不够的,因为 TakeWhile
很懒:
let s = String::from("abcdefg");
let mut it = s.chars();
it.by_ref().take_while(|x| *x != 'c');
println!("{:?}", it.next());
这将导致Some('a')
和以下警告:unused `std::iter::TakeWhile` that must be used
可以通过运行.collect()
来解决此问题,该结果会生成所需的Some('d')
:let _: String = it.by_ref().take_while(|x| *x < 'c').collect();
但是,这是正确的方法吗?这样不会浪费资源吗?
最佳答案
我相信除了 for_each
似乎很渴望之外,大多数迭代器方法都是惰性的。您可以将take_while
转换为drop_while
,如下所示:
fn main() {
let s = String::from("abcdefg");
let mut it = s.chars();
it.by_ref().take_while(|x| *x != 'c').for_each(drop);
println!("{:?}", it.next()); // prints "Some('d')"
}
playground
关于rust - 如何在可变迭代器上实现drop_while?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62595557/