Как создать список чисел и добавить его реверс к нему эффективно в Ruby

Учитывая минимальное целочисленное и максимальное целое число, я хочу создать массив, который рассчитывает от минимума максимум до два, затем обратно вниз (снова два, повторяя максимальное количество).

Например, если минимальное число равняется 1, и максимум равняется 9, я хочу [1, 3, 5, 7, 9, 9, 7, 5, 3, 1].

Я пытаюсь быть максимально кратким, который является, почему я использую остроты.

В Python я сделал бы это:

range(1, 10, 2) + range(9, 0, -2)

В Ruby, который я только начинаю изучать, все, которое я придумал до сих пор:

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

Который работает, но я знаю, что должен быть лучший путь.Что это?

6
задан Kiwi 12 May 2010 в 20:13
поделиться

1 ответ

(1..9).step(2).to_a + (1..9).step(2).to_a.reverse

Но короче было бы

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

, если бы мы играли в гольф по кодексу :)

6
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: