我有一个基本的数组 [[1,2],[2,4],[3,6]]
我想将它分成两个数组,以便...
a = [1,2,3]
b = [2,4,6]
我有一个基本的数组 [[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]
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)
a = c.map(&:first)
和 b = c.map(&:last)
。 - DaveMongoose一种方法是使用像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
将具有相同索引的条目配对组合在一起(正如您在此处所需)。这里的 *
是展开运算符,它将数组的数组解包成一系列参数。
transpose
。 - DaveMongoose
transpose
的东西都会真正增加赞数 :) - SRack