我有这个数组:
data = [
['Frank', 33],
['Stacy', 15],
['Juan', 24],
['Dom', 32],
['Steve', 24],
['Jill', 24]
]
我把它变成了一个哈希,这样我就可以用键和值来组织它,这样它们就可以更容易地单独调用。最终给了我这个
{"Frank"=>33, "Stacy"=>15, "Juan"=>24, "Dom"=>32, "Steve"=>24, "Jill"=>24}
我知道为了只看到我需要做的密钥data.keys
而且通过执行data.keys.sort
我按字母顺序获取密钥。
我认为我需要做data.keys.sort_by { |key, value| value }
这样的事情,但每当我运行时,我都会按原始顺序接收哈希键。
答案 0 :(得分:2)
您无法更改哈希的顺序,但您可以在将数组转换为哈希值之前对其进行排序:
data = [
['Frank', 33],
['Stacy', 15],
['Juan', 24],
['Dom', 32],
['Steve', 24],
['Jill', 24]
]
hash = data.sort_by(&:last).to_h
# => { "Stacy" => 15,
# "Juan" => 24,
# "Steve" => 24,
# "Jill" => 24,
# "Dom" => 32,
# "Frank" => 33 }
如果您已经有哈希,那么您必须将其转换为数组,然后对其进行排序,然后将其转换为哈希值,例如: hash.to_a.sort_by(&:last).to_h
。
答案 1 :(得分:1)
此外,
如何按照ruby 2.3.0中的值对哈希键进行排序?
如果您有像
这样的哈希值hash = {"Frank"=>33, "Stacy"=>15, "Juan"=>24, "Dom"=>32, "Steve"=>24, "Jill"=>24}
然后,哈希可以简单地按keys
或values
排序,但这会给你array
或arrays
,但可以转换为哈希。
hash.sort_by{|x,y| y}.to_h
# => {"Stacy"=>15, "Juan"=>24, "Steve"=>24, "Jill"=>24, "Dom"=>32, "Frank"=>33}
people = {
:fred => { :name => "Fred", :age => 23 },
:joan => { :name => "Joan", :age => 18 },
:pete => { :name => "Pete", :age => 54 }
}
people.sort_by { |k, v| v[:age] }
# => [[:joan, {:name=>"Joan", :age=>18}],
# [:fred, {:name=>"Fred", :age=>23}],
# [:pete, {:name=>"Pete", :age=>54}]]
通过这种方式,我们甚至可以通过:name键进行排序,如果我们这样选择的话。