有没有办法用生锈的另一个迭代器来切割迭代器?

Is there way to cut iterator by another iterator in rust?

我想把迭代器砍掉一个。图片示例:

let it = non_sliceable_container.iter();
while predicate(it.next(), ...) {
  // ...
}
let prefix = non_sliceable_container.iter().set_end(it); // <- want something like this
for val in prefix {
  // ...
}
/*
works as
let prefix = container.iter();
while  prefix != it {
  let val = prefix.next();
  // ...
}
*/

这似乎是可能的,因为只存在不可变引用。

所以您想要在某些 predicate 为真时移动 it,然后从容器的开头迭代到 it 所在的位置?您应该只能使用 take_while:

进行迭代
for val in container.iter().take_while(predicate) {
  // ..
}

似乎我误解了 rust 的迭代器:我认为可以像在 c++ 中那样比较迭代器(例如,检查它是否是同一容器和同一位置的迭代器)。这不是真的。所以这种情况的解决方法如下:

let it = non_sliceable_container.iter();
let counter = 0usize;
while predicate(it.next(), ...) {
  // ...
  counter += 1;
}
let prefix = non_sliceable_container.iter().take(counter);
for val in prefix {
  // ...
}