如何创建与 Vec 长度相同的数组?

How to create an array of the same length as a Vec?

我正在尝试创建一个与矢量长度相同的数组,但是我总是出错。

//my code
fn main() {
    let v = vec![1,2,3];
    let len = v.len();
    let a: [i32; len] = [0; len];
    println!("{:?}", a);
}

错误信息:

   Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
 --> src/main.rs:4:18
  |
3 |     let len = v.len();
  |     ------- help: consider using `const` instead of `let`: `const len`
4 |     let a: [i32; len] = [0; len];
  |                  ^^^ non-constant value

error[E0435]: attempt to use a non-constant value in a constant
 --> src/main.rs:4:29
  |
3 |     let len = v.len();
  |     ------- help: consider using `const` instead of `let`: `const len`
4 |     let a: [i32; len] = [0; len];
  |                             ^^^ non-constant value

For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to 2 previous errors

如果我将 len 声明为 const

fn main() {
    let v = vec![1,2,3];
    const len: usize = v.len();
    let a: [i32; len] = [0; len];
    println!("{:?}", a);
}

我收到这个错误:

  Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
 --> src/main.rs:3:24
  |
3 |     const len: usize = v.len();
  |     ---------          ^ non-constant value
  |     |
  |     help: consider using `let` instead of `const`: `let len`

For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to previous error

为什么上面的代码给我一个错误。在其他语言中,我可以将向量或数组列表的长度分配给常量变量。尽管 vec 的长度是可变的,但赋值时 vec 的长度必须是一个常量值。那么为什么我会收到此错误?

还有我如何在 Rust 中创建一个与 vector 长度相同的数组?

Rust 中的数组是值(类似于 C/C++ 中的数组),与 Java、C#、Python,等等,其中元素的连续存储分配在别处(堆)并从 array-typed 变量引用。

因此,Rust 中数组的大小必须在编译时已知,因为这决定了数组值需要多少字节的内存。

如果您想要 dynamically-sized 数组的灵活性,那么您需要一个由 fixed-size 结构指向的单独分配,它将为您管理分配。值得庆幸的是,Rust 带有其中一种类型!它叫做 Vec!