我有以下数组/哈希:
[{"XYZ140717"=>
{:unit=>10.25,
:perc=>0.0,
:exp=>2014-07-19 00:00:00 +1000}},
{"ABC140719"=>
{:unit=>8.71,
:perc=>0.0,
:exp=>2014-07-19 00:00:00 +1000}},
{"MNO140718"=>
{:unit=>8.55,
:perc=>0.0,
:exp=>2014-07-19 00:00:00 +1000}}]
我想对它进行排序,因此第一个是ABC140719,然后是MNO XYZ。我想不出办法。
困难的部分原因在于您的数据结构实际上没有任何意义。相反,让我们使“键”只是每个哈希的一个元素(更改:key
为语义上有意义的任何内容):
items = [...] # your data from question
items = items.map do |hash|
key, values = hash.first
{ key: key }.merge(values)
end
#=> [{:key=>"XYZ140717", :unit=>10.25, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"},
# {:key=>"ABC140719", :unit=>8.71, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"},
# {:key=>"MNO140718", :unit=>8.55, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"}]
现在使用起来变得相当简单sort_by
:
items.sort_by { |item| item[:key] }
#=> [{:key=>"ABC140719", :unit=>8.71, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"},
# {:key=>"MNO140718", :unit=>8.55, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"},
# {:key=>"XYZ140717", :unit=>10.25, :perc=>0.0, :exp=>"2014-07-19 00:00:00 +1000"}]
如果您坚持保留当前的数据结构,那么当然可以执行以下操作:
items.sort_by { |hash| hash.keys.first }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句