将数组[0]拆分为一个,[1]拆分为另一个

时间:2019-02-04 11:10:16

标签: ruby-on-rails arrays ruby

我有一个基本的数组[[1,2],[2,4],[3,6]]

我想将其分成两个数组,以便...

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

3 个答案:

答案 0 :(得分:10)

您可以按以下方式简单地使用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] 

答案 1 :(得分:1)

一种实现方法是使用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运算符,它将数组数组解包为一系列参数。

答案 2 :(得分:0)

c = [[1,2],[2,4],[3,6]]

您可以使用map并将其插入两个不同的数组

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)