Rust中Range(范围)的作用是什么?不同区间标识有何区别?
Rust区间(Range)边界规则及用法说明
Rust 中的区间语法遵循明确的边界包含/排除规则,所有原生支持的区间类型及规则如下:
start..end:左闭右开区间,包含左边界start,排除右边界end,等价于数学表达式 start ≤ x < end。例如1..3覆盖的取值为1、2。start..=end:全闭区间,同时包含左右两个边界,等价于数学表达式 start ≤ x ≤ end。你示例代码中的1..=3覆盖的取值为1、2、3,因此&foo[1..=3]得到的切片为&[1, 2, 3]。start..:左闭右无穷区间,包含左边界start,覆盖从start到集合末尾的所有元素,等价于 x ≥ start。..end:左无穷右开区间,排除右边界end,覆盖从集合开头到end之前的所有元素,等价于 x < end。..=end:左无穷右闭区间,包含右边界end,等价于 x ≤ end。..:全量区间,覆盖整个集合的全部元素。
关于你提到的左开区间(即不包含左边界start)的写法,Rust标准库没有提供原生的语法支持,你可以通过偏移左边界的方式实现对应效果:
- 要实现 start < x < end 的开区间,可写为
(start + 1)..end,等价于左边界偏移1位的左闭右开区间。例如要获取1 < x < 4的元素,写为2..4即可,覆盖取值为2、3。 - 要实现 start < x 的左开右无穷区间,可写为
(start + 1)..。例如要获取x > 2的元素,写为3..即可。
注意:如果左边界是无符号整数类型,偏移时需要注意避免
start为0时的非法值问题,常规场景下直接手动调整左边界数值即可满足需求。
内容的提问来源于stack exchange,提问作者Ralph Bisschops
相关产品推荐
相关产品推荐

