在ruby中选择2d数组的列方向



我有一个2d数组A = [[a1,a2,a3],[b1,b2,b3],[c1,c2,c3]].我想按列访问这个数组。诸如此类-

A[all][0]
-> [a1,b1,c1]

我该怎么做呢?

使用#transpose方法执行如下操作:

A.transpose.each do |ary|
   # your code
end

根据你的评论,我建议使用Matrix类。一旦您将创建一个Matrix对象,您可以访问它的元素,

require 'matrix'
A = [['a1','a2','a3'],['b1','b2','b3'],['c1','c2','c3']]
mat = Matrix[ *A ]
mat.column(1).to_a # => ["a2", "b2", "c2"]

另一种选择是使用Array#map:

A = [["a1","a2","a3"],["b1","b2","b3"],["c1","c2","c3"]]
=> [["a1", "a2", "a3"], ["b1", "b2", "b3"], ["c1", "c2", "c3"]]
>> col = 0
=> 0
>> A.map{|a| a[col]}
=> ["a1", "b1", "c1"]

可以根据需要滚入一个方法

简短的回答:

A_t = A.tranpose
A_t[0]

我会使用array#转置,但这里有一个替代使用array# zip:

A = [[1,2,3],[4,5,6],[7,8,9]]
A.first.zip(*A[1..-1]).first #=> [1, 4, 7]

,如果相反,

a = [[1,2,3],[4,5,6],[7,8,9]]

如果你不介意修改a,你可以这样做:

a.shift.zip(*a).first #=> [1, 4, 7]

相关内容

  • 没有找到相关文章