给定一个最小整数和最大整数,我想创建一个数组,从最小值到最大值计数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)
哪个有效,但我知道必须有更好的方法.它是什么?
(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)
如果我们打码打高尔夫球:)