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}将起作用,除非值重复,而不是键。