如何在ruby中复制数组的值

时间:2017-05-28 21:16:18

标签: ruby

我有两个整数数组,例如

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
b = [7, 8, 9]

我想反复复制'b'的值,以获得完全匹配的数组长度,如下所示:

   a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]   
   b = [7, 8, 9, 7, 8, 9, 7, 8, 9, 7]

我们可以假设a.length > b.length

2 个答案:

答案 0 :(得分:10)

假设你的意思

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
b = [7, 8, 9]

然后你可以这样做:

b.cycle.take(a.length) #=> [7, 8, 9, 7, 8, 9, 7, 8, 9, 7]



<script src="//repl.it/embed/JJ3x/2.js"></script>
&#13;
&#13;
&#13;

有关详细信息,请参阅Array#cycleEnumerable#take

答案 1 :(得分:2)

如果可以的话,我会使用Array#cycle但是因为它被采用了,我想我会建议一些替代方案(第一个是我最喜欢的)。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
b = [7, 8, 9]

[*b*(a.size/b.size), *b[0, a.size % b.size]]
  #=> [7, 8, 9, 7, 8, 9, 7, 8, 9, 7]    

Array.new(a.size) { |i| b[i % b.size] }
  #=> [7, 8, 9, 7, 8, 9, 7, 8, 9, 7]

b.values_at(*(0..a.size-1).map { |i| i % b.size })
  #=> [7, 8, 9, 7, 8, 9, 7, 8, 9, 7]