Я использую Ruby 2.4. Я хочу взять массив и добавить его элементы в массив массивов на основе их индекса. Так что, если я начинаю с массивомКак объединить два массива на основе индекса их элементов?
[1, 2, 3]
, и я хочу, чтобы объединить, что с массивом
[4, 5, 6]
я могу получить результат
[[1, 4], [2, 5], [3, 6]]
С помощью этой функции
arr_of_arrays = arr_of_arrays.empty? ? arr : arr_of_arrays.zip(arr).map(&:flatten)
Однако это ломается, если Я пытаюсь добавить элемент с большим количеством элементов, чем оригинал. Так что, если я пытаюсь добавить
[4, 5, 6, 7]
для исходного массива, прямо сейчас я получаю
[[1, 4], [2, 5], [3, 6]]
, но то, что я хочу
[[1, 4], [2, 5], [3, 6], [7]]
Как настроить мой выше функции добиться этого?
Если бы я хотел, чтобы элемент «nil» появился в случае, когда один из массивов длиннее, как бы я сделал taht? Так, например, ваш случай 2 woudl приводит к [[1, 4], [2, 5], [3, 6], [7, nil], [8, nil]].Я понимаю, что это немного другой вопрос, поэтому, если вы хотите, чтобы я сделал другой пост, я могу сделать это. Спасибо –
См. Edit ... – AnoE
1. 'a' мутируется в случае 2. OP не сказал, если это было разрешено (в этом случае мы должны считать, что это no-no), но даже если все в порядке, a' не мутируется в случае 1. Эта непоследовательность является потенциальной проблемой. 2. 'map (&: flatten)' не имеет никакого эффекта, если, как в примере, элементы массивов сами по себе не массивы. Если, однако, это массивы, мы могли бы иметь a = [[[1,2], 3], 4]; b = [5,6]; c = a.zip (b) # => [[[[1, 2], 3], 5], [4, 6]], что и следовало ожидать, но 'c.map (&: flatten) # => [[1, 2, 3, 5], [4, 6]] ', который не является частью спецификации. –