我有一个二维数组
v = [ ["ab","12"], ["ab","31"], ["gh","54"] ]
v子阵列的第一个元素将具有重复元素,例如"ab"
。我想创建一个散列,将键作为子数组的第一个元素,并将值作为v
中相应第二个元素的数组。
此外,我想要这个,h = {“ab”=> [“12”,“31”],“gh”=> [“54”]}然后我想返回h.values,这样返回数组[[“12”,“31”],[“54”]]
答案 0 :(得分:4)
v.inject(Hash.new{|h,k|h[k]=[]}) { |h, (k, v)| h[k] << v ; h}
它的作用:
答案 1 :(得分:1)
v.inject({}) do |res, ar|
res[ar.first] ||= []
res[ar.first] << ar.last
res
end
答案 2 :(得分:1)
v = [ ["ab","12"], ["ab","31"], ["gh","54"] ]
这会让你得到一个哈希,其中键是 子阵列中唯一的第一个元素。
h = v.inject({}) { |c,i| (c[i.first] ||= []) << i.last; c }
这会将哈希值转换回数组,以防您需要数组格式数组。
arr = h.collect { |k,v| [k,v] }