【问题标题】:Sort a hash by value in descending order and then key in ascending order ruby按值降序对哈希进行排序,然后按升序键入 ruby
【发布时间】:2015-05-21 21:48:35
【问题描述】:

我有一个这样的哈希

 trial_hash ={"key1"=>1000, "key2"=>34, "key3"=>500, "key4"=>500, "key5"=>500, "key6"=>500}

我按值的降序排列:

 my_hash = trial_hash.sort_by{|k, v| v}.reverse

我现在是这样理解的:

 [["key1", 1000], ["key4", 500], ["key5", 500], ["key6", 500], ["key3", 500], ["key2", 34]]

但我希望它在值相同时按键的升序排序。我该怎么做?

例如:上面的哈希会这样排序:

 [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]

【问题讨论】:

    标签: ruby sorting hash


    【解决方案1】:

    在比较中,数组首先由它们的第一个元素求值,然后是它们的第二个元素,等等。您可以使用这个事实来枚举顺序比较。通过[-v, k] 比较首先按值(以相反的顺序)排序,然后按键。

    >> trial_hash.sort_by{|k, v| [-v, k]}
    => [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]
    

    【讨论】:

    • 酷..谢谢!我试过这个 trial_hash.sort_by{|k, v| [v,-Integer(k)]}.reverse 但后来 key 不是字符串所以它不起作用,我把 key 1 而不是 key1 它工作了。但是你的新代码很棒。
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2012-10-24
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多