У меня есть два массива целых чисел, например

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
nubitol 29 Май 2017 в 00:16

2 ответа

Лучший ответ

Предполагая, что вы имеете в виду

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>

См. Array#cycle и < a href = "http://ruby-doc.org/core-2.4.1/Enumerable.html#method-i-take" rel = "nofollow noreferrer"> Enumerable#take для получения дополнительной информации.

10
Sagar Pandya 30 Июн 2017 в 23:02

Я бы использовал 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]
2
Cary Swoveland 29 Май 2017 в 20:29