gpt4 book ai didi

for-loop - 如何从 Rust 中的 for 循环中迭代和提取值

转载 作者:行者123 更新时间:2023-11-29 07:50:19 25 4
gpt4 key购买 nike

我是 Rust 的新手,希望了解借用等概念。我正在尝试使用标准输入创建一个简单的二维数组。代码:

use std::io;

fn main() {
let mut values = [["0"; 6]; 6]; // 6 * 6 array

// iterate 6 times for user input
for i in 0..6 {
let mut outputs = String::new();
io::stdin().read_line(&mut outputs).expect(
"failed to read line",
);

// read space separated list 6 numbers. Eg: 5 7 8 4 3 9
let values_itr = outputs.trim().split(' ');
let mut j = 0;
for (_, value) in values_itr.enumerate() {
values[i][j] = value;
j += 1;
}
}
}

这不会编译,因为 outputs 变量的生命周期不够长:

error[E0597]: `outputs` does not live long enough
--> src/main.rs:20:5
|
14 | let values_itr = outputs.trim().split(' ');
| ------- borrow occurs here
...
20 | }
| ^ `outputs` dropped here while still borrowed
21 | }
| - borrowed value needs to live until here

如何将 block 中的迭代值放入值数组中?

最佳答案

split() 为您提供从原始字符串借来的子字符串(字符串切片),原始字符串是第 6 行的 outputs

  1. 字符串切片不能超过 outputs 的范围:当循环迭代结束时,outputs 被释放。由于 values 的生命周期更长,因此无法将切片存储在那里。
  2. 我们不能在修改outputs 时借用outputs 的片段。因此,即使 String outputs 本身是在 values 之前定义的,我们也无法轻松地将 .split() 中的字符串切片放入;修改字符串(读入它)会使切片无效。

解决方案需要要么

  • 使用 String 的嵌套数组,当您从拆分迭代器分配一个元素时,使用 &str 创建一个 String .to_string()。我会推荐这个解决方案。 (但是 String 数组并不那么容易处理,也许这已经需要使用 Vec 代替。)1
  • 在构建从输入 String 中借用的 &str 嵌套数组之前读取所有输入。如果嵌套数组只是您临时需要的东西,这很好。

1:您可以使用类似vec![vec![String::new(); 6]; 6] 而不是

关于for-loop - 如何从 Rust 中的 for 循环中迭代和提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34652021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com