gpt4 book ai didi

ruby - 在 Ruby 中用 step != 1 声明一个整数范围

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:39 26 4
gpt4 key购买 nike

更新 2:为了后代,这就是我决定这样做的方式(感谢 Jorg 的投入):

100.step(2, -2) do |x|
# my code
end

(显然有很多方法可以做到这一点;但听起来这是最“Ruby”的方法;而这正是我所追求的。)


更新:好的,所以我正在寻找的是步骤:

(2..100).step(2) do |x|
# my code
end

但事实证明,我并没有 100% 坦率地回答我最初的问题。我实际上想向后迭代这个范围。令我惊讶的是,消极的一步是不合法的。

(100..2).step(-2) do |x|
# ArgumentError: step can't be negative
end

那么:我该如何倒退呢?


我对 Ruby 完全陌生,所以要温柔。

假设我想遍历从 2 到 100 的偶数范围;我该怎么做?

显然我可以做:

(2..100).each do |x|
if x % 2 == 0
# my code
end
end

但是,显然(再次),那将是非常愚蠢的。

我知道我可以这样做:

i = 2
while i <= 100
# my code
i += 2
end

我相信我也可以编写自己的自定义类,提供自己的 each 方法(?)。不过,我几乎可以肯定这会有点矫枉过正。

我对两件事感兴趣:

  1. 是否可能使用标准 Range 语法的一些变体(即 (x..y).each)来做到这一点?
  2. 无论哪种方式,完成此任务(使用 Range 或其他方式)的最惯用的“Ruby 方式”是什么?就像我说的,我是这门语言的新手;因此,如果您能就如何以更典型的 Ruby 风格做事提供任何指导,我们将不胜感激。

最佳答案

您不能用“步骤”声明一个Range。范围没有步骤,它们只有开始和结束。

您当然可以分步迭代 Range,例如:

(2..100).step(2).reverse_each(&method(:p))

但如果您只想迭代,那么您首先需要 Range 做什么?为什么不只是迭代?

100.step(2, -2, &method(:p))

这与 reverse_each 不同的是它不需要生成中间数组。

关于ruby - 在 Ruby 中用 step != 1 声明一个整数范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com