按值排序哈希然后按键排序(但键是相反的)

Mir*_*318 1 ruby sorting

标题说明了一切.

total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
Run Code Online (Sandbox Code Playgroud)

我想按值排序,然后按键排序,但按键降序排序.

像这样:

{"Bob"=>37, "Carl"=>42, "Alice"=>42}
Run Code Online (Sandbox Code Playgroud)

我试过了:

return total.sort_by { |k, v| [v, k] }
Run Code Online (Sandbox Code Playgroud)

但是从这里我不知道如何逆转k......

Ale*_*ein 5

使用排序:

total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
total.sort { |(k1, v1), (k2, v2)| [v1, k2] <=> [v2, k1] }.to_h
# => {"Bob"=>37, "Carl"=>42, "Alice"=>42}
Run Code Online (Sandbox Code Playgroud)

首先,按值(v1 <=> v2)排序,然后按键(k2 <=> k1)反向排序,因为我们需要它同时将它放入数组中.

编辑:@ Mirror318,看起来很吓人,看看这里的优秀解释:什么是Ruby <=>(太空船)运营商?