Ruby on rails 如何根据日期对Ruby哈希进行排序?

Ruby on rails 如何根据日期对Ruby哈希进行排序?,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,我有一个具有以下结构的哈希对象: {"action1"=> {"2014-08-20"=>0, "2014-07-26"=>1, "2014-07-31"=>1 }, "action2"=> {"2014-08-01"=>2, "2014-08-20"=>2, "2014-07-25"=>2, "2014-08-06"=>1, "2014-08-21"=>1 } "action3"=

我有一个具有以下结构的哈希对象:

{"action1"=>
  {"2014-08-20"=>0,
   "2014-07-26"=>1,
   "2014-07-31"=>1
  },
 "action2"=>
  {"2014-08-01"=>2,
   "2014-08-20"=>2,
   "2014-07-25"=>2,
   "2014-08-06"=>1,
   "2014-08-21"=>1
 }
 "action3"=>
  {"2014-07-30"=>2,
   "2014-07-31"=>1,
   "2014-07-22"=>1,
  }
}
我想根据日期对哈希进行排序,并返回一个哈希(而不是数组)。最终结果应该是:

{"action1"=>
  {"2014-07-26"=>1,
   "2014-07-31"=>1,
   "2014-08-20"=>0
  },
 "action2"=>
  {"2014-07-25"=>2,
   "2014-08-01"=>2,
   "2014-08-06"=>2,
   "2014-08-20"=>1,
   "2014-08-21"=>1
 }
 "action3"=>
  {"2014-07-22"=>1,
   "2014-07-30"=>2,
   "2014-07-31"=>1
  }
}
这就是您所需要的:

h.each { |k,v| h[k] = v.sort.to_h }
  #=> {"action1"=>{"2014-07-26"=>1, "2014-07-31"=>1, "2014-08-20"=>0},
  #    "action2"=>{"2014-07-25"=>2, "2014-08-01"=>2, "2014-08-06"=>1,
  #       "2014-08-20"=>2, "2014-08-21"=>1},
  #    "action3"=>{"2014-07-22"=>1, "2014-07-30"=>2, "2014-07-31"=>1}}
出现在Ruby 2.0中。对于早期版本,请使用class方法:即,将
v.sort.to_h
替换为
Hash[v.sort]

这就是您所需要的:

h.each { |k,v| h[k] = v.sort.to_h }
  #=> {"action1"=>{"2014-07-26"=>1, "2014-07-31"=>1, "2014-08-20"=>0},
  #    "action2"=>{"2014-07-25"=>2, "2014-08-01"=>2, "2014-08-06"=>1,
  #       "2014-08-20"=>2, "2014-08-21"=>1},
  #    "action3"=>{"2014-07-22"=>1, "2014-07-30"=>2, "2014-07-31"=>1}}

出现在Ruby 2.0中。对于早期版本,请使用class方法:即,将
v.sort.to_h
替换为
Hash[v.sort]

迭代哈希,并对每个值进行排序

h = {"action1"=>
  {"2014-08-20"=>0,
   "2014-07-26"=>1,
   "2014-07-31"=>1
  },
 "action2"=>
  {"2014-08-01"=>2,
   "2014-08-20"=>2,
   "2014-07-25"=>2,
   "2014-08-06"=>1,
   "2014-08-21"=>1
 },
 "action3"=>
  {"2014-07-30"=>2,
   "2014-07-31"=>1,
   "2014-07-22"=>1,
  }
}

h.each do |k, v|
    h[k] = Hash[v.sort]
end

迭代散列,并对每个值进行排序

h = {"action1"=>
  {"2014-08-20"=>0,
   "2014-07-26"=>1,
   "2014-07-31"=>1
  },
 "action2"=>
  {"2014-08-01"=>2,
   "2014-08-20"=>2,
   "2014-07-25"=>2,
   "2014-08-06"=>1,
   "2014-08-21"=>1
 },
 "action3"=>
  {"2014-07-30"=>2,
   "2014-07-31"=>1,
   "2014-07-22"=>1,
  }
}

h.each do |k, v|
    h[k] = Hash[v.sort]
end

在这里,您需要迭代散列并获取值,而不是对每个值应用sort_by函数,以便获得结果

hashName.each do |key, hash|
  Hash[hashName.sort_by{|k,v| k}]
end

在这里,您需要迭代散列并获取值,而不是对每个值应用sort_by函数,以便获得结果

hashName.each do |key, hash|
  Hash[hashName.sort_by{|k,v| k}]
end

}
之后,在
“ation3”=>
之前,需要一个逗号。无需回复。;一旦您看到此评论,我将删除它。您需要在
}
之后,在
“ation3”=>
之前使用逗号。无需回复。;一旦你看到这条评论,我会删除它。谢谢你的帮助。噢,我得到一个错误:未定义#的方法“to_h”。我正在使用Ruby 1.9.3。感谢您的帮助。噢,我得到一个错误:未定义#的方法“to_h”。我正在使用Ruby 1.9.3。