Создать массив фиксированной длины, заданный массив произвольной длины - PullRequest
2 голосов
/ 02 февраля 2010

Я хочу написать метод, который создает массив фиксированной длины (в моем случае 12) из ​​любого массива произвольной длины (хотя длина всегда будет 12 или меньше) путем повторения объектов в заказ.

Так, например, с учетом массива a:

a = [1, 2, 3, 4]

Я бы хотел вернуться:

a = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

Другой пример:

b = ["peach", "plumb", "pear", "apple", "banana", "orange"]

Вернется:

b = ["peach", "plumb", "pear", "apple", "banana", "orange", "peach", "plumb", "pear", "apple", "banana", "orange"]

И так далее. Если получить массив с 12 объектами, он просто вернет тот же массив.

Методы, которые я написал для достижения этой цели, были очень уродливыми и не очень рубиновыми; интересует, как другие справятся с этим.

Заранее спасибо.

Ответы [ 4 ]

15 голосов
/ 03 февраля 2010

В 1.8.7 и 1.9 вы можете делать классные вещи с Счетчиками

a = [1,2,3,4]
#=> [1,2,3,4]
a.cycle.take 12
#=> [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
4 голосов
/ 03 февраля 2010
Array.new(12).fill(some_array).flatten[0..11]
3 голосов
/ 02 февраля 2010
def twelvify array
  array += array while array.size < 12
  array[0..11]
end

Это тоже немного некрасиво, но, по крайней мере, просто. : -)

1 голос
/ 02 февраля 2010
array * (12/array.size) + array[0, (12 % array.size)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...