範圍(Range)表達式
Rust支持範圍操作符,有以下幾種表示範圍的操作符:
範圍表達式 | 類型 | 表示的範圍 |
---|---|---|
start..end | std::ops::Range | start ≤ x < end |
start.. | std::ops::RangeFrom | start ≤ x |
..end | std::ops::RangeTo | x < end |
.. | std::ops::RangeFull | - |
start..=end | std::ops::RangeInclusive | start ≤ x ≤ end |
..=end | std::ops::RangeToInclusive | x ≤ end |
例如,1..5
表示1、2、3、4共四個整數,1..=5
表示1、2、3、4、5共五個整數。
需注意的是其中表示全範圍的表達式..
,它表示可以儘可能地生成下一個數,直到無法生成為止。
在生成Slice的時候,需要使用到範圍表達式。例如,從數組生成Slice:
#![allow(unused)] fn main() { let arr = [11, 22, 33, 44, 55]; let s1 = &arr[0..3]; // [11,22,33] let s2 = &arr[1..=3]; // [22, 33, 44] let s3 = &arr[..]; // [11, 22, 33, 44, 55] }
範圍表達式也常被用於迭代操作。例如for
語句:
#![allow(unused)] fn main() { for i in 1..5 { println!("{}", i); // 1 2 3 4 } }
另外,範圍表達式和對應類型的實例是等價的。例如,下面兩個表示範圍的方式是等價的:
#![allow(unused)] fn main() { let x = 0..5; let y = std::ops::Range {start: 0, end: 5}; }