我有像
这样的哈希animals = {dog: 4, cat: 5}
我想在键上对它进行排序但得到值。目前我有这个,感觉很难看:
animals_sorted = Hash[animals.sort].values # 5, 4
有没有更漂亮,更“红宝石”的做法?
答案 0 :(得分:2)
animals.sort.map(&:last)
排序将产生类似[[:cat, 5], [:dog, 4]]
的内容。
map(&:last)
在数组中的每个数组上调用last
,并为您提供[5, 4]
的最终结果
答案 1 :(得分:1)
以下是使用sort_by
,map
和pop
的一种方式:
> animals.sort_by{ |k, v| k }.map(&:pop)
=> [5, 4]
答案 2 :(得分:1)
animals.values_at *animals.keys.sort #=> [5,4]
Hash#values_at从animals
中提取其参数给出的键的值,按照后者的顺序,返回一个数组:
{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]
我喜欢这种方式:“排序键的值”。