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。