Rust 能否在负数区间使用 for 循环完成迭代操作?
Rust负数区间迭代的实现方案
Rust 默认的a..b区间(Range类型)为左闭右开的升序迭代器,仅当起始值小于结束值时才会生成元素。-1..x写法无法生效的核心原因是:当x为小于-1的负数时,起始值大于结束值,区间为空,自然无法迭代出任何内容。
可行的实现方案如下:
- 方案1:区间反转法
这是最简洁的实现方式,先构造从目标最小值到-1的升序区间,再调用rev()方法反转迭代顺序即可。
示例:从-1迭代到-5(包含-5)的写法:
如果不需要包含终点值,比如到-5但不包含-5,把区间改为for i in (-5..=-1).rev() { println!("{}", i); // 输出顺序:-1、-2、-3、-4、-5 }(-4..=-1).rev()即可。 - 方案2:successors 自定义迭代器
如果你需要更灵活的步进逻辑,可以使用标准库的successors函数生成自定义迭代器:
示例:从-1迭代到-5(不包含-5)的写法:use std::iter::successors; for i in successors(Some(-1), |&n| (n > -5).then_some(n - 1)) { println!("{}", i); // 输出顺序:-1、-2、-3、-4 }
内容的提问来源于stack exchange,提问作者herpderp
相关产品推荐
相关产品推荐

