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

Ani*_*dha 2 ruby sorting hash

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

{Oct 2014: "some value", Aug 2012: "some value", July 2011: "new value"}
Run Code Online (Sandbox Code Playgroud)

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

hash_name.keys.sort
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*hit 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"]]
Run Code Online (Sandbox Code Playgroud)

注意 :

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

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