按字符串格式包含日期的键对哈希进行排序

时间:2014-03-16 16:07:59

标签: ruby sorting hash

我有一个包含字符串格式日期的哈希为 -

{Oct 2014: "some value", Aug 2012: "some value", July 2011: "new value"}

我想根据这些对它们进行排序。我尝试调用sort_by或对键进行排序,但由于它们以字符串格式存储,因此按字母顺序对它们进行排序。

hash_name.keys.sort

这给了我2012年8月,2011年7月,2014年10月的顺序。我正按照年份和月份的顺序对它们进行排序,如2011年7月,2012年8月,2014年10月

1 个答案:

答案 0 :(得分:6)

使用strptime方法将每个密钥转换为Date对象:

require 'date'
hash = {
          'Oct 2014' => "some value", 
          'Aug 2012' => "some value", 
          'July 2011' => "new value"
       }
hash.sort_by { |k,_| Date.strptime(k,"%b %Y") }
# => [["July 2011", "new value"],
#     ["Aug 2012", "some value"],
#     ["Oct 2014", "some value"]]

注意:

  • %b - 缩写的月份名称(' Jan'

  • %Y - 包含世纪的年份(可以是负数,至少4位数) - 0001,0000,1995,2009,14292等

    < / LI>