如何创建数字列表并在Ruby中有效地附加它

Kiw*_*iwi 6 ruby arrays range

给定一个最小整数和最大整数,我想创建一个数组,从最小值到最大值计数2,然后退回(再次按2,重复最大数字).

例如,如果最小数字是1,最大值是9,我想要[1, 3, 5, 7, 9, 9, 7, 5, 3, 1].

我想尽可能简洁,这就是我使用单行的原因.

在Python中,我会这样做:

range(1, 10, 2) + range(9, 0, -2)
Run Code Online (Sandbox Code Playgroud)

在我刚刚开始学习的Ruby中,我到目前为止所提出的是:

(1..9).inject([]) { |r, num| num%2 == 1 ? r << num : r }.reverse.inject([]) { |r, num| r.unshift(num).push(num) }
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我知道必须有更好的方法.它是什么?

ram*_*ion 6

(1..9).step(2).to_a + (1..9).step(2).to_a.reverse
Run Code Online (Sandbox Code Playgroud)

但会更短

Array.new(10) { |i| 2 * [i, 9-i].min + 1 }
Run Code Online (Sandbox Code Playgroud)

如果我们打码打高尔夫球:)

  • 如果希望码高尔夫球/消除复制的第一个例子,可以这样做:`(A =(1..9).步骤(2).to_a)+ a.reverse`.这是否更好可能取决于你在前世所做的C数量. (3认同)