我有阵列的基本阵列[[1,2],[2,4],[3,6]]
我想给分成两列,这样...
a = [1,2,3]
b = [2,4,6]
你可以简单地使用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]
这样做的一个方法是使用像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
通过配对了同一指数的条目(如你想在这里做的)相结合的阵列。这里的*
是图示操作者,其中数组的数组解开成一系列的参数。
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)