2

次のハッシュ配列があるとします。

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

文字列値でこれを行う構文は何ですか?

4

1 に答える 1

3

sort完全なメソッドを書く必要があるかもしれません:

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

比較の順序は、「1」の場合はbvs 、「2」の場合はvsであることに注意してください。aab

文字列の代わりに記号キーを使用した場合、これはより簡潔になる可能性があります。

于 2012-10-10T14:35:02.220 に答える