[英]How do you make a range in Rust?
文档没有说明如何和教程完全忽略 for 循环。
从 1.0 开始, for循环使用具有Iterator
trait的类型值。
如果您对for循环的操作方式感兴趣,请参阅模块 std::iter 中描述的语法糖。
例子:
fn main() {
let strs = ["red", "green", "blue"];
for sptr in strs.iter() {
println!("{}", sptr);
}
}
( 游乐场)
如果您只想迭代一个数字范围,就像在 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);
}
}
笔记:
循环项是对 iteratee 元素的借用引用。 在这种情况下, strs
的元素具有类型&'static str
- 它们是指向静态字符串的借用指针。 这意味着sptr
类型为&&'static str
,因此我们将其取消引用为*sptr
。 我更喜欢的另一种形式是:
for &s in strs.iter() { println!("{}", s); }
实际上,教程的循环部分确实涵盖for
循环:
迭代向量时,使用
for
代替。for elt in ["red", "green", "blue"] { std::io::println(elt); }
但是,如果您需要索引,您可以使用核心库中的uint::range
函数(或int::range
或u8::range
u32::range
或u64::range
或u64::range
)和 Rust 的语法执行以下操作对于块:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
Rust 曾经支持这种等效的语法,但后来被删除:
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
for i in range(0, 100)
现在已被弃用,取而代之的是for i in 0..100
(根据rustc 1.0.0-nightly
。
另外值得注意的是,当您在范围内使用标识符时,编译器无法消除歧义(例如, for i in 0..a
),因此您必须使用for i in (0..a)
,但有一个拉取请求提交来解决这个问题。
请注意,从 rustc 0.4(2012 年 10 月)开始,替代构造
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
好像不再支持了。
let range = (start..end).collect::<Vec<i32>>();
使用int::range 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.