[英]How to filter array of hashes by two pairs of `key => value` in ruby?
我有一系列哈希:
array = [
{:created_at => 1520913341, :event_id => '111', :album_id => '123'},
{:created_at => 1520740541, :event_id => '234', :album_id => '999'},
{:created_at => 1520654141, :event_id => '111', :album_id => '777'},
{:created_at => 1520394941, :event_id => '233', :album_id => '444'},
{:created_at => 1520049341, :event_id => '890', :album_id => '765'}
]
我需要保留所有:event_id
哈希值,如果:event_id
被復制,請保留最早的:created_at
值。我該如何在ruby中做到這一點?
我希望得到以下回應:
[
{:created_at => 1520740541, :event_id => '234', :album_id => '999'},
{:created_at => 1520654141, :event_id => '111', :album_id => '777'},
{:created_at => 1520394941, :event_id => '233', :album_id => '444'},
{:created_at => 1520049341, :event_id => '890', :album_id => '765'}
]
array.sort_by { |h| h[:created_at] }.uniq { |h| h[:event_id] }
#=> [{:created_at=>1520049341, :event_id=>"890", :album_id=>"765"},
# {:created_at=>1520394941, :event_id=>"233", :album_id=>"444"},
# {:created_at=>1520654141, :event_id=>"111", :album_id=>"777"},
# {:created_at=>1520740541, :event_id=>"234", :album_id=>"999"}]
請參閱Array#uniq ,特別是“按順序遍歷self
,並保留第一次出現的情況。”。
嘗試這個
array.group_by { |t| t[:event_id] }.map { |_,hash| hash.min_by { |t| t[:created_at]} }.sort_by {|t| -t[:created_at]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.