在给定任意长度的数组的情况下创建固定长度的数组

时间:2010-02-02 20:16:47

标签: ruby arrays

我正在寻找一个方法来创建一个固定长度的数组(在我的情况下是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个对象的数组,它将返回相同的数组。

到目前为止,我为实现这一目标而编写的方法非常难看,并且不是非常Rubyish;对别人如何处理这个问题感兴趣。

提前致谢。

4 个答案:

答案 0 :(得分:15)

1.8.7& 1.9你可以用Enumerators

做很酷的事情
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]

答案 1 :(得分:4)

Array.new(12).fill(some_array).flatten[0..11]

答案 2 :(得分:3)

def twelvify array
  array += array while array.size < 12
  array[0..11]
end

它也有点难看,但它至少是简单的。 : - )

答案 3 :(得分:1)

array * (12/array.size) + array[0, (12 % array.size)]