Как создать список чисел и эффективно добавить его обратный к нему в Ruby - PullRequest
6 голосов
/ 12 мая 2010

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

Например, если минимальное число равно 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) }

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

1 Ответ

6 голосов
/ 12 мая 2010
(1..9).step(2).to_a + (1..9).step(2).to_a.reverse

Но короче будет

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

если мы играем в гольф:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...