是否可以有条件地应用迭代器转换?

时间:2018-05-06 20:17:50

标签: iterator rust

我有一个带有一系列帖子和一个可选after_id的函数来跳过id小于或等于给定的帖子。

fn get_page<'a>(data: &'a Vec<u64>, after_id: Option<u64>) -> Vec<&u64> {
    let data = data.iter();
    let data = match after_id {
        Some(id) => data.skip_while(|&&post| post <= id),
        None => data,
    };

    data.take(10).collect()
}

此代码触发编译错误,指出Some arm创建了iter::SkipWhile结构,其类型与来自{{1}的posts类型(slice::Iter)不兼容} arm。

我看到的唯一解决方法是:Nonematch解构为if或类似的内容,是:

let posts = match after_id {
    Some(id) => posts.skip_while(|post| post.id <= id).collect(),
    None => posts.collect(),
};

明显的缺点是我不必要地迭代整个集合并使用额外的内存。

是否可以有条件地应用skip_while并将结果存储在单个变量中,而不是collect中间结果?

0 个答案:

没有答案