【发布时间】:2015-06-06 18:52:40
【问题描述】:
这里是初学者。我的第一个问题。对我放轻松。
给定以下哈希:
pets_ages = {"Eric" => 6, "Harry" => 3, "Georgie" => 12, "Bogart" => 4, "Poly" => 4,
"Annie" => 1, "Dot" => 3}
并运行以下方法:
pets_ages.sort {|x, y| x[1] <=> y[1]}.to_h
返回以下内容:
{
"Annie" => 1,
"Dot" => 3,
"Harry" => 3,
"Poly" => 4,
"Bogart" => 4,
"Eric" => 6,
"Georgie" => 12
}
您会注意到哈希按值很好地排序,正如预期的那样。我想改变的是键的顺序,以便在打平的情况下它们保持字母顺序。请注意,“Dot”和“Harry”在这方面是正确的,但由于某种原因,“Poly”和“Bogart”不是。我的理论是,在平局的情况下,它会自动按长度对键进行排序,而不是按字母顺序排序。我该如何改变呢?
【问题讨论】:
-
我会小心地期望键使用哈希以给定的顺序排列。除非您确定使用 ActiveSupport::OrderedHash 或其他确保密钥排序的库。散列应该是基于键的查找。不应该有订单。如果您需要订单,请将其保留为数组。
-
pets_ages.sort_by { |k, v| [v, k] }或pets_ages.sort_by(&:reverse)应该可以工作 -
@PhilipHallstrom 在 Ruby 中,哈希从 1.9+ 开始明确排序。
-
很高兴知道这一点。谢谢!
标签: ruby sorting hash key-value alphabetical