我有这个数组:
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 }
的事情,但无论何时运行,我都会按原始顺序接收散列键。
您不能更改哈希的顺序,但可以在将数组转换为哈希之前对其进行排序:
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
。
此外,
如何在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键进行排序。