You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中修改嵌套Vec内部向量失败问题求助

Rust 修改嵌套 Vec<Vec> 不生效的问题解决

你期望给嵌套向量的每个内部向量末尾添加1,输入[[1,2],[3,4]]得到[[1,2,1],[3,4,1]],但编写的函数未生效,原代码如下:

fn add_numbers(mut row_matix: Vec<Vec<i64>>) {
    for mut row in row_matix {
        row.push(1)
    } 
}

问题原因

这段代码不生效的核心是所有权转移:

  • 函数参数mut row_matix: Vec<Vec<i64>>按值传入,外层Vec的所有权被转移到函数内部。
  • 循环for mut row in row_matix会进一步把每个内部Vec的所有权转移到row变量,你修改的只是这些被转移出来的副本,原外层Vec里的元素根本没被改动。函数执行结束后,副本会被销毁,原数据自然没有变化。

解决方案

方案1:使用可变引用修改原数据

将函数参数改为可变引用,直接操作原向量的内部元素,无需转移所有权:

fn add_numbers(row_matrix: &mut Vec<Vec<i64>>) {
    // 遍历可变引用,row 是内部 Vec 的可变引用
    for row in row_matrix {
        row.push(1);
    }
}

调用示例:

fn main() {
    let mut matrix = vec![vec![1, 2], vec![3, 4]];
    add_numbers(&mut matrix);
    println!("{:?}", matrix); // 输出 [[1,2,1],[3,4,1]]
}

方案2:返回修改后的新向量

如果不想使用引用,可以让函数接收原向量的所有权,修改后返回新的嵌套向量:

fn add_numbers(row_matrix: Vec<Vec<i64>>) -> Vec<Vec<i64>> {
    row_matrix.into_iter()
        .map(|mut row| {
            row.push(1);
            row
        })
        .collect()
}

调用示例:

fn main() {
    let matrix = vec![vec![1, 2], vec![3, 4]];
    let modified_matrix = add_numbers(matrix);
    println!("{:?}", modified_matrix); // 输出 [[1,2,1],[3,4,1]]
}

内容的提问来源于stack exchange,提问作者HWilmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:53:24