简单问题,能否在一个负数范围上进行for循环?具体地说,从-1开始迭代到一些负值。显然,for i in -1..x
不可行。
除了在循环中应用符号的不良解决方案外,还有什么其他方法吗?
简单问题,能否在一个负数范围上进行for循环?具体地说,从-1开始迭代到一些负值。显然,for i in -1..x
不可行。
除了在循环中应用符号的不良解决方案外,还有什么其他方法吗?
x < -1
,那么你将得到一个(a,b)
范围,其中a > b
。+1
,因此循环永远不会执行。如果你以C ++风格编写它,你将会说:for (i=-1; i < x; i++) { ... }
所以你想做的是反转范围:
for i in (x..=-1).rev()
编辑:因为(x..-1)
不包括-1
,所以我们需要将其更改为(x..=-1)
。在这种情况下,范围将包括x
和1
。如果我们不想要那样,我们也可以调整x
的边界,例如((x+1)..=-1).rev
for i in (x..-1).rev()
循环从 -2
递减到 x
,因为范围 x..-1
不包括终点。 - Sven Marnach(x..-1).rev()
从**-2**开始。应该是(x..=-1).rev()
。 - user4815162342Range
类型(使用 a..b
表示)是一个半开区间,即左闭右开的 递增 区间。如果你有一个满足 a >= b
的区间,则该区间为空。Iterator::rev
反转该区间,这需要该区间实现 DoubleEndedIterator
并提供反向迭代方法 next_back
。((x + 1)..0).rev()
。iter::successors
获取基本上任何你想要的迭代器,只需提供一个 fn next(&T) -> Option<T>
即可。在某些特定情况下,这可能比反转递增区间更加清晰。(x..-1).rev()
将从 -2 开始。你需要使用 (x..=-1).rev()
。 - user4815162342