【问题标题】:Remove last n elements of a vec, by chunks按块删除 vec 的最后 n 个元素
【发布时间】:2023-02-09 14:09:23
【问题描述】:

有一个 vec![1,2,3,4,5,6,7,8,9,10,11,12] 我想以 6 个元素的块删除最后 3 个元素,所以结果将是一个切片或像 [1,2,3,7,8,9] 这样的 vec。有没有一种简单的方法可以做到这一点而无需中间分配(比如收集小的 vecs),最好使用迭代器? 谢谢!

【问题讨论】:

  • 我想到了这样的事情,但我不知道在地图内部收集效率很高。 let a: Vec<_> = v.chunks_exact(6).map(|x| x.iter().take(3).collect::<Vec<_>>()).flatten().collect();

标签: rust


【解决方案1】:

我只会根据索引进行过滤(你可以通过.enumerate()获得)

fn main() {
    let data = vec![1,2,3,4,5,6,7,8,9,10,11,12];
    let new_data: Vec<i32> = data.iter()
        .enumerate()
        .filter(|(i, _)| (*i / 3) % 2 == 0)
        .map(|(_, v)| *v) // you could have this be  Vec<&i32>, but I don't think you'd save memory/time
        .collect();
    println!("{new_data:?}");
}

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多