loops - 你如何在 Rust 中创建一个范围?

标签 loops for-loop range rust

文档没有说明如何使用,而且教程完全忽略了 for 循环。

最佳答案

从 1.0 开始,for 循环使用 Iterator trait 类型的值。 .

这本书在 chapter 3.5 中描述了这种技术。和 chapter 13.2 .

如果您对for 循环的运作方式感兴趣,请参阅 Module std::iter 中描述的语法糖。 .

例子:

fn main() {
    let strs = ["red", "green", "blue"];

    for sptr in strs.iter() {
        println!("{}", sptr);
    }
}

( Playground )

如果您只想遍历一个数字范围,就像在 C 的 for 循环中一样,您可以使用 a..b 语法创建一个数字范围:

for i in 0..3 {
    println!("{}", i);
}

如果您同时需要数组中的索引和元素,惯用的方法是使用 Iterator::enumerate方法:

fn main() {
    let strs = ["red", "green", "blue"];

    for (i, s) in strs.iter().enumerate() {
        println!("String #{} is {}", i, s);
    }
}

注意事项:

  • 循环项是对被迭代元素的借用引用。在这种情况下,strs 的元素具有类型 &'static str - 它们是借用的指向静态字符串的指针。这意味着 sptr 的类型为 &&'static str,因此我们将其取消引用为 *sptr。我更喜欢的另一种形式是:

      for &s in strs.iter() {
          println!("{}", s);
      }
    

关于loops - 你如何在 Rust 中创建一个范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271970/

相关文章:

python - 处理两个列表,逐行迭代并连接值

r - 如何将id变量添加到R中的多个数据集

python - 在 Python 中嵌套 for 循环的替代方法

php - 获取 ip 范围内的所有值

c++ - 为什么从 C++11 中删除了对范围访问?

python - 将范围值转换为整数

java - 使用 Java 8 Stream API 时如何移至循环中的下一个值

php - 我的 while 循环不会从我的数据库中回显数据

python - 在Python for循环中使用 "or"来定义默认序列

javascript - Node - 在 For 周期内等待请求响应