按键排序哈希值但得到值

时间:2014-08-20 14:00:28

标签: ruby

我有像

这样的哈希
animals = {dog: 4, cat: 5}

我想在键上对它进行排序但得到值。目前我有这个,感觉很难看:

animals_sorted = Hash[animals.sort].values # 5, 4

有没有更漂亮,更“红宝石”的做法?

3 个答案:

答案 0 :(得分:2)

animals.sort.map(&:last)

排序将产生类似[[:cat, 5], [:dog, 4]]的内容。

map(&:last)在数组中的每个数组上调用last,并为您提供[5, 4]的最终结果

答案 1 :(得分:1)

以下是使用sort_bymappop的一种方式:

> animals.sort_by{ |k, v| k }.map(&:pop)
=> [5, 4]

答案 2 :(得分:1)

animals.values_at *animals.keys.sort #=> [5,4]

Hash#values_atanimals中提取其参数给出的键的值,按照后者的顺序,返回一个数组:

{dog: 4, cat: 5}.values_at *{dog: 4, cat: 5}.keys.sort
  #=> {dog: 4, cat: 5}.values_at *[:dog, :cat].sort
  #=> {dog: 4, cat: 5}.values_at *[:cat, :dog]
  #=> {dog: 4, cat: 5}.values_at :cat, :dog
  #=> [5,4]

我喜欢这种方式:“排序键的值”。