我想制作一个大的正方形数组,但尺寸限制为1023.因此,我想按照建议in a comment制作一个{1}的1D阵列。我试过这个作为开始:
Vec
适用于fn main() {
const VMAX: usize = 1000;
const ALEN: usize = 32;
let mut arr2: Vec<[f64; ALEN]> = vec![[0.0; ALEN]; VMAX];}
的任何值,但大于32的VMAX
给出:
ALEN
出现问题,我在查找信息和解释错误消息时遇到问题。我怎样才能制作出巨大的方阵?一种不同的方法也可以,性能很重要。当然,我会对数组做一些事情,例如循环索引并在其中放入一些值。
答案 0 :(得分:2)
您遇到的问题是Rust还不支持非类型通用参数,因此[T; N]
上的特征仅针对从N
到{{1}的0
值实现}} (包括的)。是的,这很烦人。
一个简单的解决方法是使用循环:
32
接近let v: Vec<_> = (0..MAX).map(|_| [0.; MAX]).collect();
宏在引擎盖下的内容 1 。
否则,可以将数组包装在自定义类型中并为其实现vec!
(和Clone
)。这也是一种可能性。
1 Index
更聪明一点,确保内存只分配一次而不是多次分配。但是,根据@bluss的说法,为库提供了大量的质量性能改进,vec![T; N]
应该很快变得足够智能,可以为大多数常见的迭代器进行单一分配。