获取特定结构类型的索引长度

  • 本文关键字:索引 类型 结构 获取 rust
  • 更新时间 :
  • 英文 :


我有一个由两个i32类型组成的自定义Struct,它们组成了一个2D向量。我一直在使用for循环访问某些索引,但我还没有弄清楚如何获得'col '或'row'的长度。下面是我的代码:

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

fn main() {
let mut vec_struct = Vec::new();
for i in 0..5 {
for j in 0..7 {  
let index = [
Vec2d {
col: j * 3,
row: i * 5,
},
];
vec_struct.push(index);
}
}
// I want to get 5 or 7 somehow, but none of these two work
println!("{}", vec_struct[0][0].len());
println!("{}", vec_struct[0].len());

// This works, but prints both dimensions (output: 35)
println!("{}", vec_struct.len());
}

由于您将元素存储在平面Vec中,因此您已经丢失了每列/行开始和结束的信息。

您可以将它们存储在嵌套的Vec<Vec<Vec2d>>中,或者尝试恢复这些信息,并知道当列号为零时新列开始:

let columns = vec_struct
.iter()
.enumerate()
.skip(1) // The first column is always zero, skip it
.find_map(|(i, Vec2d { col, .. })| if *col == 0 { Some(i) } else { None })
.unwrap();
let rows = vec_struct.len() / columns;

您将元素存储在单元素数组([Vec2d { ... }])中。我猜你尝试了第一个解决方案,但这个数组总是保持一个元素大小。你需要使用这样的向量:

for i in 0..5 {
let mut row = Vec::new();
for j in 0..7 {
let index = Vec2d {
col: j * 3,
row: i * 5,
};
row.push(index);
}
vec_struct.push(row);
}
let rows = vec_struct.len();
let columns = vec_struct[0].len();

最新更新