【发布时间】:2023-04-08 12:08:01
【问题描述】:
我正在尝试使用 for 循环创建一个向量向量。我尝试了下面的设计,但没有成功:
// num_partitions is the primary vector, v is vector that contains a set of integers
// This function should return a Primary Vector that hold num_partitions of vectors
fn partition_data(num_partitions: usize, v: &Vec<usize>) -> Vec<Vec<usize>> {
let partition_size = v.len() / num_partitions;
// Create a vector that will contain vectors of integers
let mut xs: Vec<Vec<usize>> = Vec::new();
for j in 0..partition_size {
for i in 0..partition_size {
// create a new Vector and push elements to it
let mut x1: Vec<usize> = Vec::new();
x1.push(v[i]);
}
// push this new Vector the the Primary Vector
xs.push(x1);
}
// return primary vector
xs
}
【问题讨论】:
-
您实际上并没有解释问题是什么,也没有提供重现案例,但是我希望不会编译,因为 Rust 是严格的块范围的。由于您在最内层循环中声明
x1,因此它只存在于所述最内层循环的一次迭代中。该声明需要提升一个范围。 -
除此之外,您的代码没有多大意义:它只会创建
partition_size向量,所有这些向量都包含来自输入向量的第一个partition_size项。 -
输入
&Vec<T>通常没有用处,&[T]提供了更多的调用者灵活性而没有任何缺点。 -
x1应该在外部for循环中声明,而不是在内部循环中。这可能无法编译,因为xs.push(x1)引用了该范围内不存在的变量。这不是 Rust 特有的问题,你会在 Java、Python、C++ 等中遇到相同或相似的问题。
标签: for-loop vector multidimensional-array rust iteration