Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按包含字符串格式日期的键对哈希进行排序_Ruby_Sorting_Hash - Fatal编程技术网

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

Ruby 按包含字符串格式日期的键对哈希进行排序,ruby,sorting,hash,Ruby,Sorting,Hash,我有一个包含字符串格式日期的哈希,如下所示- {Oct 2014: "some value", Aug 2012: "some value", July 2011: "new value"} 我想根据这些分类。我尝试调用sort_by或sort on key,但由于它们是以字符串格式存储的,所以它会按字母顺序对它们进行排序 hash_name.keys.sort 这给了我2012年8月、2011年7月、2014年10月的订单。当我尝试按年份和月份对它们进行排序时,如2011年7月、2012年

我有一个包含字符串格式日期的哈希,如下所示-

{Oct 2014: "some value", Aug 2012: "some value", July 2011: "new value"}
我想根据这些分类。我尝试调用sort_by或sort on key,但由于它们是以字符串格式存储的,所以它会按字母顺序对它们进行排序

hash_name.keys.sort
这给了我2012年8月、2011年7月、2014年10月的订单。当我尝试按年份和月份对它们进行排序时,如2011年7月、2012年8月、2014年10月

使用方法将每个键转换为
日期
对象:

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
    -缩写的月份名称(“一月”)

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


谢谢。这对我有用。有没有一种方法不应该将输出转换为数组?
sort_by
convert array,只需执行
Hash[Hash.sort_by{k,{k,{u| Date.strtime(k,“%b%Y”)}]
即可将结果作为哈希得到。