rust 如何反转向量中的子向量?

vaqhlq81  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(179)

请看下面的代码:

fn main() {
    let mut rows: Vec<Vec<u32>> = Vec::from([
        Vec::from([1, 2, 3]),
        Vec::from([4, 5, 6]),
        Vec::from([7, 8, 9]),
    ]);

    let res: Vec<Vec<u32>> = rows.iter().map(|arr| arr.reverse()).collect();
}

我有一个整数向量的向量,我想反转rows中的每个数组。
使用此代码会产生类型注解问题,其中map函数认为arr的类型为&Vec<u32>,而.reverse()期望它的类型为Vec<u32>
我该怎么克服呢?

q3qa4bjr

q3qa4bjr1#

1.如果您不再需要原来的rows

您可以使用into_iter

fn main() {
    let rows: Vec<Vec<u32>> = Vec::from([
        Vec::from([1, 2, 3]),
        Vec::from([4, 5, 6]),
        Vec::from([7, 8, 9]),
    ]);

    let res: Vec<Vec<u32>> = rows.into_iter().map(|mut arr| {arr.reverse(); arr}).collect();
}

或者使用iter_mut就地执行:

fn main() {
    let mut rows: Vec<Vec<u32>> = Vec::from([
        Vec::from([1, 2, 3]),
        Vec::from([4, 5, 6]),
        Vec::from([7, 8, 9]),
    ]);
    rows.iter_mut().for_each(|mut arr| arr.reverse());
}

2.如果之后确实需要rows

fn main() {
    let rows: Vec<Vec<u32>> = Vec::from([
        Vec::from([1, 2, 3]),
        Vec::from([4, 5, 6]),
        Vec::from([7, 8, 9]),
    ]);

    let res: Vec<Vec<u32>> = rows.iter().map(|arr| {
        let mut arr = arr.clone();
        arr.reverse();
        arr
    }).collect();
}

相关问题