Arrays 如何在ruby 2.3.0中按值对哈希键排序
我有这个阵列:Arrays 如何在ruby 2.3.0中按值对哈希键排序,arrays,ruby,sorting,hash,Arrays,Ruby,Sorting,Hash,我有这个阵列: data = [ ['Frank', 33], ['Stacy', 15], ['Juan', 24], ['Dom', 32], ['Steve', 24], ['Jill', 24] ] 我把它转换成一个散列,这样我就可以用键和值来组织它,这样它们就更容易单独调用了。结果给了我这个 {"Frank"=>33, "Stacy"=>15, "Juan"=>24, "Dom"=>32, "Steve"=>24, "Jill"=
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
我可以按字母顺序获得键
我假设我需要执行类似于{key,value{value}的
data.keys.sort_的操作,但是每当我运行时,我都会按原始顺序接收哈希键 您不能更改哈希的顺序,但可以在将数组转换为哈希之前对其进行排序:
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 }
如果您已经有一个散列,那么您必须将其转换为数组,然后对其进行排序,然后再将其转换回散列,例如散列
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 }
如果您已经有一个散列,那么您必须将其转换为数组,然后对其进行排序,然后再将其转换回散列,例如散列
如何在ruby 2.3.0中按值对哈希键排序
如果你有一个像
hash = {"Frank"=>33, "Stacy"=>15, "Juan"=>24, "Dom"=>32, "Steve"=>24, "Jill"=>24}
然后,可以简单地按键
或值
对哈希进行排序,但这将为您提供一个数组
或数组
,可以将其转换为哈希
hash.sort_by{|x,y| y}.to_h
# => {"Stacy"=>15, "Juan"=>24, "Steve"=>24, "Jill"=>24, "Dom"=>32, "Frank"=>33}
对于嵌套哈希
这样,我们甚至可以按:name键进行排序,如果我们选择的话。此外
如何在ruby 2.3.0中按值对哈希键排序
如果你有一个像
hash = {"Frank"=>33, "Stacy"=>15, "Juan"=>24, "Dom"=>32, "Steve"=>24, "Jill"=>24}
然后,可以简单地按键
或值
对哈希进行排序,但这将为您提供一个数组
或数组
,可以将其转换为哈希
hash.sort_by{|x,y| y}.to_h
# => {"Stacy"=>15, "Juan"=>24, "Steve"=>24, "Jill"=>24, "Dom"=>32, "Frank"=>33}
对于嵌套哈希
这样,如果我们愿意,我们甚至可以按:name键进行排序。很高兴知道这一点,谢谢!通过这样做--hash=data.sort_By{keys,values | values},它也将它们按正确的顺序排序。非常感谢。这很有帮助!这不是被问到的。。。问题是如何按键的值对键进行排序。很高兴知道这一点,谢谢!通过这样做--hash=data.sort_By{keys,values | values},它也将它们按正确的顺序排序。非常感谢。这很有帮助!这不是被问到的。。。问题是如何按键的值对键进行排序。这很难通过编程实现,因为您有重复的键。否则,像data.to|h.map{k,v | v}.sort.map{vv{h.key(vv)=>vv}}这样的东西会起作用。当你有相同的值时会发生什么?是的。。。为清楚起见,data.to|h.map{k,v | v}.sort.map{vv{h.key(vv)=>vv}}将起作用,只是值会重复,而不是键。这很难通过编程实现,因为您有重复的键。否则,像data.to|h.map{k,v | v}.sort.map{vv{h.key(vv)=>vv}}这样的东西会起作用。当你有相同的值时会发生什么?是的。。。为清楚起见,data.to|h.map{k,v | v}.sort.map{vv{h.key(vv)=>vv}将起作用,除非值重复,而不是键。