【问题标题】:How to populate an array without using mut?如何在不使用 mut 的情况下填充数组?
【发布时间】:2019-07-20 15:14:39
【问题描述】:

如果我想填充一个数字列表,我可以使用向量,因此可以使用堆,这样做:

let w = (0..1024).collect::<Vec<_>>();

但是,如果我想避免堆,我必须使用数组。要使用数组,我必须使用循环,这意味着我必须有一个可变变量:

let mut w = [0u32; 1024];
for i in 0..1024 {
    w[i] = i as u32;
}

是否可以在不使用可变变量的情况下填充数组?


此问题已被标记为重复问题。我不确定这怎么可能混淆。

“如何在不使用 mut 的情况下填充数组?”表示如何在不使用可变变量的情况下填充数组。任何mut,而不仅仅是数组变量本身。

“如何创建和初始化不可变数组?”表示如何创建不可变数组。

【问题讨论】:

  • “不使用可变变量”是人为的约束吗?创建数组然后执行for v in &amp;mut w {for v in w.iter_mut() 似乎是执行此操作的常用方法。另见:stackoverflow.com/q/26185618/1233251
  • 当然您可以将可变性限制在嵌套范围内:let w = { let mut array = ...; ...; array };
  • @E_net4 如果 w 没有被声明为可变的,@E_net4 是否可以工作?
  • 它没有声明w 是可变的,这就是我问的原因。
  • @E_net4 是的。我避免使用可变变量。

标签: arrays rust


【解决方案1】:

你不能。

Iterator 在编译时无法保证任何特定长度,因此.collect() 无法生成固定大小的数组。

你可以这样做:

let w = w;

之后将绑定重新创建为不可变,或将初始化移动到辅助函数。

【讨论】:

    【解决方案2】:

    答案是。 ⠀

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多