arrays - 如何根据 ruby​​ 2.3.0 中的值对哈希键进行排序

标签 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"=>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.

关于arrays - 如何根据 ruby​​ 2.3.0 中的值对哈希键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191001/

相关文章:

python - 如何根据端口号对IP地址进行排序?

c++ - 在递归/另一个函数中返回静态/普通数组

javascript - 如何使这个数组展平函数在 JavaScript 中递归运行?

ruby - 在 Ruby 中以相反顺序遍历时修改数组中的特定项

c# - 排序高分的数组

javascript - 从数组值开始按升序追加元素

c - 数组到 C 中的链表函数;如何遍历列表以附加节点?

c++ - C/C++ 从数组复制

sql - "Popular"用户的 Rails 高效 SQL

Ruby Net::OpenTimeout:执行已过期