如何制作大型2D矩阵

时间:2016-10-26 15:23:34

标签: arrays vector rust

我想制作一个大的正方形数组,但尺寸限制为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

出现问题,我在查找信息和解释错误消息时遇到问题。我怎样才能制作出巨大的方阵?一种不同的方法也可以,性能很重要。当然,我会对数组做一些事情,例如循环索引并在其中放入一些值。

1 个答案:

答案 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]应该很快变得足够智能,可以为大多数常见的迭代器进行单一分配。