给定一个数组:
arr = [['a', '1'], ['b','2'], ['c', '3']]
将它分成两个数组的最佳方法是什么?
例如,从上面的数组我想得到以下两个数组:
first = ['a','b','c']
second = ['1', '2', '3']
我可以使用collect
吗?
答案 0 :(得分:15)
好吧,我偶然发现了arr.transpose
arr = [['a', '1'], ['b','2'], ['c', '3']].transpose
first = arr[0]
second = arr[1]
与上述arr.zip
,arr.map
和foreach
的答案相比,效率更高?
或者哪个是最优雅的解决方案?
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 两次。但是,这通常不应该是一个问题,除非您正在处理大量元素或此操作必须运行很多次。