【问题标题】:Multi string-element sort on Ruby hash, first key descending, second key ascendingRuby哈希上的多字符串元素排序,第一个键降序,第二个键升序
【发布时间】:2012-10-01 00:26:47
【问题描述】:

给定以下哈希数组:

values = [
  {"one"=>"BA", "two"=>"AAB"},
  {"one"=>"AA", "two"=>"BBA"},
  {"one"=>"AA", "two"=>"BCB"},
  {"one"=>"AA", "two"=>"ABA"},
  {"one"=>"BC", "two"=>"AAC"},
  {"one"=>"AC", "two"=>"AAB"},
  {"one"=>"AC", "two"=>"AAA"},
  {"one"=>"AB", "two"=>"BCC"}
]

如何获得以下输出:

  {"one"=>"BC", "two"=>"AAC"}
  {"one"=>"BA", "two"=>"AAB"}
  {"one"=>"AC", "two"=>"AAA"}
  {"one"=>"AC", "two"=>"AAB"}
  {"one"=>"AB", "two"=>"BCC"}
  {"one"=>"AA", "two"=>"ABA"}
  {"one"=>"AA", "two"=>"BBA"}
  {"one"=>"AA", "two"=>"BCB"}

如果两个键值都指向整数,我可以很容易地做到这一点:

multi_sort = values.sort_by { |x| [-x["one"], x["two"] ] }

使用字符串值执行此操作的语法是什么?

【问题讨论】:

    标签: ruby string sorting hash multikey


    【解决方案1】:

    您可能需要编写完整的sort 方法:

    values.sort { |a,b| a["one"] == b["one"] ? a["two"] <=> b["two"] : b["one"] <=> a["one"] }
    

    请注意,比较的顺序是b vs a 用于“一”,a vs b 用于“二”。

    如果您使用符号键而不是字符串,这可能会更简洁。

    【讨论】:

    • 我实际上将问题归结为上述问题。在我的实际用例中,我无法控制它们是符号还是字符串,至少没有额外的工作。
    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多