ruby - Ruby 哈希上的多字符串元素排序,第一个键降序,第二个键升序

标签 ruby string sorting hash multikey

给定以下哈希数组:

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"] ] }

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

最佳答案

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

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

请注意,比较的顺序是“one”的 ba 以及 ab为“二”。

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

关于ruby - Ruby 哈希上的多字符串元素排序,第一个键降序,第二个键升序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12820941/

相关文章:

c++ - 如何正确显示一个二维字符串数组?

Python 属性和字符串格式

ios - 在swift中对字符串数组进行排序

ruby - 根据值然后键对ruby中的哈希进行排序

ruby-on-rails - 如何部署我的应用程序可以访问但其他人无法获取的 'private' gem?

Ruby gem Mechanize 与 jRuby 1.6.0 (Ruby 1.9.2)

java - 如何在 Java 中比较字符串?

c++ - 对具有许多缓存未命中的 1000-2000 个元素进行排序

ruby - 如果存在,则从字符串中删除前导引号和尾随引号

ruby-on-rails - Rails 4 - in_time_zone 意外行为