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

Rust中如何获取自定义Vec2d结构体对应的行列维度长度

问题根因

你的代码没有实现真正的二维分层存储,自然无法直接获取独立的行/列长度:

  • vec_struct的实际类型是Vec<[Vec2d; 1]>:内层循环每次创建的是长度固定为1的数组,仅包含1个Vec2d实例,之后直接把这个长度1的数组push到外层动态数组中
  • 最终外层数组总长度是5*7=35,和你打印的总元素数完全吻合,全程没有做行、列的层级拆分
  • vec_struct[0][0]拿到的是Vec2d结构体实例,该类型没有实现len()方法,编译直接报错;vec_struct[0]拿到的是长度为1的固定数组,就算调用len()也只会返回固定值1,不可能得到你预期的列数7。
修复方案

方案1:使用嵌套动态数组实现二维结构

用外层Vec存行,每个行元素是存对应列数据的内层Vec,两层都是动态长度集合,可以直接调用len()拿到对应维度值:

#[derive(Debug)]
pub struct Vec2d {
    col: i32,
    row: i32,
}

fn main() {
    // 声明嵌套Vec:外层元素为每行的列数据集合
    let mut vec_struct: Vec<Vec<Vec2d>> = Vec::new();

    for i in 0..5 {
        let mut current_row = Vec::new();
        for j in 0..7 {  
            current_row.push(Vec2d {
                col: j * 3,
                row: i * 5,
            });
        }
        vec_struct.push(current_row);
    }

    println!("行数:{}", vec_struct.len()); // 输出5
    println!("列数:{}", vec_struct[0].len()); // 输出7
}

方案2:扁平化存储+独立存维度值

如果追求内存连续的访问性能,可以把所有元素存在一维数组里做扁平化存储,单独把行列维度值和数据绑定存放,不需要靠嵌套结构推导维度:

#[derive(Debug)]
pub struct Vec2d {
    col: i32,
    row: i32,
}

// 二维存储结构,绑定维度信息和底层数据
struct Vec2dCollection {
    row_count: usize,
    col_count: usize,
    data: Vec<Vec2d>
}

impl Vec2dCollection {
    fn new(row_count: usize, col_count: usize) -> Self {
        let mut data = Vec::with_capacity(row_count * col_count);
        for i in 0..row_count {
            for j in 0..col_count {
                data.push(Vec2d {
                    col: (j * 3) as i32,
                    row: (i * 5) as i32,
                })
            }
        }
        Self { row_count, col_count, data }
    }
}

fn main() {
    let vec_2d = Vec2dCollection::new(5,7);
    println!("行数:{}", vec_2d.row_count); // 输出5
    println!("列数:{}", vec_2d.col_count); // 输出7
    println!("总元素数:{}", vec_2d.data.len()); // 输出35
}
注意点

Rust中固定长度数组[T; N]的长度是编译期确定的常量,调用len()永远返回常量N,如果你需要动态获取运行时的维度长度,必须使用Vec<T>这类动态长度集合,或者单独存储维度值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:33:18