Ruby 先按值排序,然后按键排序(但键是反向的)

Ruby 先按值排序,然后按键排序(但键是反向的),ruby,sorting,Ruby,Sorting,标题说明了一切 total = {"Bob"=>37, "Alice"=>42, "Carl"=>42} 我想先按值排序,然后按键排序,但要按键的降序排序 像这样: {"Bob"=>37, "Carl"=>42, "Alice"=>42} 我试过: return total.sort_by { |k, v| [v, k] } 但是从这里我不知道如何反转k…使用: total={“Bob”=>37,“Alice”=>42,“Carl”=>42} total

标题说明了一切

total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
我想先按值排序,然后按键排序,但要按键的降序排序

像这样:

{"Bob"=>37, "Carl"=>42, "Alice"=>42}
我试过:

return total.sort_by { |k, v| [v, k] }
但是从这里我不知道如何反转
k

使用:

total={“Bob”=>37,“Alice”=>42,“Carl”=>42}
total.sort{|(k1,v1)、(k2,v2)|[v1,k2][v2,k1]}.to_h
#=>{“鲍勃”=>37,“卡尔”=>42,“爱丽丝”=>42}
首先,按值排序(
v1 v2
),然后按键反向排序(
k2 k1
),因为我们同时需要它,所以将它放入数组中


编辑:@Mirror318,看起来很吓人,看看这里的精彩解释:

如果您使用的是ruby>=2.1,那么只需调用
对元组排序数组执行以下操作:

total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
total.sort_by{|k, v| [v, k]}.to_h
Else调用
散列。新建

total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
Hash.new total.sort_by{|k, v| [v, k]}.to_h
另一种方式:

total.sort_by { |k,v| [-v,k] }.reverse.to_h
  #=> {"Bob"=>37, "Carl"=>42, "Alice"=>42}

这让我想爬进一个角落>sort\u by{x}
大致相当于
sort{a,b{a,b}
。相应地展开你的代码,你几乎就知道答案了。镜像,不久你就会把它看作是例行程序。这不会按降序排列键。
total.sort_by { |k,v| [-v,k] }.reverse.to_h
  #=> {"Bob"=>37, "Carl"=>42, "Alice"=>42}