2015-04-20 2 views
2

array1 = [ [a], [b], [c], [d], [e] ]Рубин - ввод элементов массива в другой массив в порядке

array2 = [1, 2, 3, 4, 5, ...]

Как я могу поместить каждый из элементов массив2 в каждый из элементов array1, чтобы получить что-то вроде:

array3 = [ [a, 1], [b, 2], [c, 3], [d, 4], ... ]

Я пытаюсь что-то вроде array1.map { |a| [a, array2.each { |b| b}] }, но не совсем уверен, как его получить.

Спасибо!

+0

Является ли значение в массиве2 индексом в array1, или вы хотите объединить массивы в соответствии с их положением в каждом массиве? –

ответ

8

Просто попробуйте это с помощью Array#flatten и Array#zip

array1 = [ ['a'], ['b'], ['c'], ['d'], ['e'] ] 
array2 = [1, 2, 3, 4, 5] 
array1.flatten.zip(array2) 
# [["a", 1], ["b", 2], ["c", 3], ["d", 4], ["e", 5]] 

Больше информации о Array#zip можно найти here.

+0

Хорошо показать результат, но это хорошее использование zip – Anthony

+0

@QPaysTaxes [Это сообщение в блоге] (http://dfriedm.github.io/blog/2013/10/12/ruby-zip-method/) (не мое) имеет большое объяснение рубинового 'zip' метода. – Sid

+1

@Sid Итак, поставьте его в свой ответ, чтобы люди (например, я * кашель *), которые не знакомы с .zip, могут видеть это прямо в a ... о, вы уже это сделали. Э-э. Хорошо! Хорошо на вас. Я собираюсь ... Оставь здесь. –

2
array1 = [ ['a'], ['b'], ['c'], ['d','e'] ] 
array2 = [1, 2, 3, 4] 

Если вы не хотите, чтобы изменить array1 или array2:

array1.zip(array2).map { |a1,e2| a1 + [e2] } 
    #=> [["a", 1], ["b", 2], ["c", 3], ["d", "e", 4]] 
array1 
    #=> [ ['a'], ['b'], ['c'], ['d','e'] ] 

Если вы хотите изменить array1 но не array2:

array1.zip(array2).map { |a1,e2| a1 << e2 } 
    #=> [["a", 1], ["b", 2], ["c", 3], ["d", "e", 4]] 
array1 
    #=> [["a", 1], ["b", 2], ["c", 3], ["d", "e", 4]] 

Если вы хотите изменить array1 и также может изменять array2:

array1.map { |a| a << array2.shift } 
    #=> [["a", 1], ["b", 2], ["c", 3], ["d", "e", 4]] 
array1 
    #=> [["a", 1], ["b", 2], ["c", 3], ["d", "e", 4]] 
array2 
    #=> [] 

В первых двух случаях вы можете использовать Array#transpose вместо Array#zip заменой array1.zip(array2) с [array1, array2].transpose.