分裂数组的数组,为一个[0],[1]到另一个

问题描述 投票:1回答:3

我有阵列的基本阵列[[1,2],[2,4],[3,6]]

我想给分成两列,这样...

a = [1,2,3]
b = [2,4,6]
ruby-on-rails arrays ruby
3个回答
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
投票

这样做的一个方法是使用像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通过配对了同一指数的条目(如你想在这里做的)相结合的阵列。这里的*是图示操作者,其中数组的数组解开成一系列的参数。


0
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.