разбиение массива массивов [0] на один, [1] на другой - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть базовый массив массивов [[1,2],[2,4],[3,6]]

Я хочу разделить это на два массива, чтобы ...

a = [1,2,3]
b = [2,4,6]

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Один из способов сделать это - использовать функцию, подобную each, и воспользоваться преимуществами автоматического разбиения массива в Ruby:

ary = [[1,2],[2,4],[3,6]]
a = []
b = []

ary.each{|first,second| a << first; b << second}
# The entry [1,2] is automatically split into first = 1 and second = 2

Если вы хотите, вы также можете написать это в одном вызове методаиспользование each_with_object

a,b = ary.each_with_object([[],[]]) do |(first, second), result|
  result[0] << first
  result[1] << second
}

Третий вариант будет использовать Array.zip:

a,b = ary[0].zip(*ary[1..-1])

zip объединяет массивы путем объединения записей с одинаковыми индексами (как выхочу сделать здесь).* здесь является оператором splat, который разворачивает массив массивов в ряд аргументов.

0 голосов
/ 04 февраля 2019

Вы можете просто использовать Array # transpose , как показано ниже,

arr = [[1,2],[2,4],[3,6]]
# => [[1, 2], [2, 4], [3, 6]] 

a, b = arr.transpose
# => [[1, 2, 3], [2, 4, 6]] 
a
# => [1, 2, 3] 
b
# => [2, 4, 6] 
0 голосов
/ 04 февраля 2019
c = [[1,2],[2,4],[3,6]]

Вы можете использовать карту и вставить в два разных массива

a = c.map{|x,y| x}
# => [1, 2, 3]

b = c.map{|x,y| y}
 #=> [2, 4, 6]

Редактировать В качестве комментария @DaveMongoose вы также можете написать это

a = c.map(&:first)
b = c.map(&:last)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...