如何拆分数组?

时间:2010-07-05 18:03:46

标签: ruby arrays

给定一个数组:

arr = [['a', '1'], ['b','2'], ['c', '3']] 

将它分成两个数组的最佳方法是什么?

例如,从上面的数组我想得到以下两个数组:

first = ['a','b','c']  
second = ['1', '2', '3'] 

我可以使用collect吗?

4 个答案:

答案 0 :(得分:15)

好吧,我偶然发现了arr.transpose

arr = [['a', '1'], ['b','2'], ['c', '3']].transpose 

first = arr[0] 

second = arr[1] 

与上述arr.ziparr.mapforeach的答案相比,效率更高? 或者哪个是最优雅的解决方案?

OR (感谢JörgWMittag的评论 - 见下面的评论) 第一,第二= arr.transpose

答案 1 :(得分:4)

使用zip方法也非常优雅:

arr[0].zip *arr[1..-1]
first = arr[0]
second = arr[1]

答案 2 :(得分:1)

arr = [['a', '1'], ['b','2'], ['c', '3']]

a = []
b = []

arr.each{ |i| a << i[0]; b << i[1] }

答案 3 :(得分:0)

您可以通过collect(map的别名)执行此操作,但不能在单个操作中执行此操作,因为map / collect始终返回单个Array。你可以做到

first = arr.map { |element| element[0] }   
second = arr.map { |element| element[1] }

,其缺点是迭代 arr 两次。但是,这通常不应该是一个问题,除非您正在处理大量元素或此操作必须运行很多次。