有没有办法用生锈的另一个迭代器来切割迭代器?
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 {
// ...
}
我想把迭代器砍掉一个。图片示例:
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 {
// ...
}