我有一个基本的数组[[1,2],[2,4],[3,6]]
我想将其分成两个数组,以便...
a = [1,2,3]
b = [2,4,6]
答案 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)