繁体   English   中英

Ruby库函数将Enumerable转换为Hash

[英]Ruby library function to transform Enumerable to Hash

考虑Enumerable的这个扩展:

module Enumerable

  def hash_on
    h = {}
    each do |e|
      h[yield(e)] = e
    end
    h
  end

end

它是这样使用的:

people = [
  {:name=>'fred', :age=>32},
  {:name=>'barney', :age=>42},
]
people_hash = people.hash_on { |person| person[:name] }
p people_hash['fred']      # => {:age=>32, :name=>"fred"}
p people_hash['barney']    # => {:age=>42, :name=>"barney"}

是否有内置功能已经这样做,或者足够接近它不需要这个扩展?

Enumerable.to_h[key, value] s序列转换为Hash以便您可以执行以下操作:

people.map {|p| [p[:name], p]}.to_h

如果您有多个值映射到同一个键,则保留最后一个。

[   {:name=>'fred', :age=>32},
    {:name=>'barney', :age=>42},
].group_by { |person| person[:name] }

=> {"fred"=>[{:name=>"fred", :age=>32}],
   "barney"=>[{:name=>"barney", :age=>42}]}

键是数组的形式,有可能有几个Freds或Barneys,但你可以使用.map重建,如果你真的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM