Arrays 如何在哈希数组中获取特定键?

Arrays 如何在哈希数组中获取特定键?,arrays,ruby,hash,Arrays,Ruby,Hash,我有一个哈希数组: [{"folder"=>"j"}, {"path"=>"p"}, {"folder"=>"b"}] 我通过以下方式合并它们: flat_map(&:entries) .group_by(&:first) .map{|k,v| Hash[k, v.map(&:last)]} 然后我得到: [{"folder"=>["j", "b"]}, {"path"=>["p"]}] 正如所料 我的问题是,:文件夹和:路径(

我有一个哈希数组:

[{"folder"=>"j"}, {"path"=>"p"}, {"folder"=>"b"}]
我通过以下方式合并它们:

flat_map(&:entries)
  .group_by(&:first)
  .map{|k,v| Hash[k, v.map(&:last)]}
然后我得到:

[{"folder"=>["j", "b"]}, {"path"=>["p"]}]
正如所料

我的问题是,
:文件夹
:路径
(我还有更多键)可以随机排序。不必循环检查密钥名,是否可以分别获取每个哈希?比如,

# After merging...
folders = elem[:folder] # => ["j", "b"]
paths =  elem[:path].. # => ["p"]

基本上,我希望获得
:文件夹
:路径
,而不必一直循环。

您可以通过以下方法解决问题:

elem = [{"folder"=>["j", "b"]}, {"path"=>["p"]}]
merged = elem.reduce({}, :merge)
# => {"folder" => ["j", "b"], "path" => ["p"]}
merged["folder"]
# => ["j", "b"]
merged["path"]
# => ["p"]

您可以通过以下方式解决问题:

elem = [{"folder"=>["j", "b"]}, {"path"=>["p"]}]
merged = elem.reduce({}, :merge)
# => {"folder" => ["j", "b"], "path" => ["p"]}
merged["folder"]
# => ["j", "b"]
merged["path"]
# => ["p"]

首先,您可以使用不同的方法:

collection = [{"folder"=>"j"}, {"path"=>"p"}, {"folder"=>"b"}]
使用
每个带有对象的\u
(或使用
reduce
的类似方法):


首先,您可以使用不同的方法:

collection = [{"folder"=>"j"}, {"path"=>"p"}, {"folder"=>"b"}]
使用
每个带有对象的\u
(或使用
reduce
的类似方法):

ar=[{“文件夹”=>“j”},{“路径”=>“p”},{“文件夹”=>“b”}]
elem=Hash.new{[]}
每个{k,v{elem[k]
ar=[{“folder”=>“j”},{“path”=>“p”},{“folder”=>“b”}]
elem=Hash.new{[]}

每个{k,v{elem[k]什么是
elem
?死在哪里
:文件夹和
路径从哪里来?什么是
elem
?死在哪里
:文件夹和
路径从哪里来?
ar =[{"folder"=>"j"}, {"path"=>"p"}, {"folder"=>"b"}]
elem = Hash.new{[]}

ar.each{|hash| hash.each{|k,v| elem[k] <<= v }}
folders, paths = elem.values_at("folder", "path")