取n个元素,当condition为真时继续



我有一个迭代器,包含一个数字和一些数据,按时间戳排序。

我想取前n个元素,并继续,而下面的元素的时间戳是相同的。

例如:

(1, "foo"),
(2, "bar"),
(2, "bar2"),
(3, "baz"),
(3, "baz2"),
(3, "baz3").
(5, "qux")

take_n_and_while_timestamp_matches(1)将获取1个元素:时间戳1Take_n_and_while_timestamp_matches(3)将接受3个元素:时间戳1和2Take_n_and_while_timestamp_matches(2)也接受3个元素:时间戳1和2Take_n_and_while_timestamp_matches(4)将接受6个元素:时间戳1、2和3Take_n_and_while_timestamp_matches(100)将接受所有元素:时间戳1和2以及3和5。

我需要它,以便以后能够轻松地对值进行分页。继续,我只需要获取一批时间戳为>Lastrongeen_timestamp,没什么问题。诸如在延续数据中存储特定时间戳中返回的元素数量之类的解决方法是不够好的,因为如果时间戳实际上是当前时间戳,则新项可能会在再次提取之前到达。

给定您的时间戳是Cloneable(需要,因为我们不能在last中存储引用),您可以使用take_while来获取项目,而任意条件保持

fn take_n_and_while_timestamp_matches<T: Eq + Clone, V> (it: impl IntoIterator<Item = (T, V)>, mut n: usize) -> impl Iterator<Item = (T, V)> {
let it = it.into_iter();
let mut last = None;
it.take_while(move |(t, _)| {
if n == 0 {
return Some(t) == last.as_ref();
}
n -= 1;
last = Some(t.clone());
true
})
}

相关内容

  • 没有找到相关文章