我有一个哈希数组,它包含一些重复的键。
[{:number=>116498,
:account=>206161,
:tax_id=>"320996279",
:created=>"11/13/2015"
},
{:number=>116500,
:account=>206161,
:tax_id=>"320996279",
:created=>"12/13/2015"
},
{:number=>116499,
:account=>206161,
:tax_id=>"320996279",
:created=>"01/13/2015"
},
{:number=>116501,
:account=>206162,
:tax_id=>"122032382",
:created=>"11/13/2015"
}]
请注意,密钥tax_id具有重复值。我想迭代哈希数组并以这种方式获得我的输出,其中(:created)键具有最大值
[
{:number=>116500,
:account=>206161,
:tax_id=>"320996279",
:created=>"12/13/2015"
},
{:number=>116501,
:account=>206162,
:tax_id=>"122032382",
:created=>"11/13/2015"
}]
答案 0 :(得分:1)
这应该有效(假设你的数组被称为a
):
a.group_by{|el| el[:tax_id]}.values.map{|el| el.max_by{|x| x[:created]}}
正如评论中所指出的,这假定max是通过简单的字符串比较计算的,如果想要进行日期比较,您可能希望将created
转换为Date或DateTime。以下内容将添加:created_date
并使用它来计算max:
a.each{|el| el.merge!( {created_date: Date.strptime(el[:created], '%m/%d/%Y')})}.group_by{|el| el[:tax_id]}.values.map{|el| el.max_by{|x| x[:created_date]}}
其工作原理如下:
:created_date
; :tax_id
分组,这将采用["tax_id_1" => [ {…}, …], "tax_id_2" => …]
; :created_date
的数组。