10

重複の可能性:
Ruby で配列を降順でソートする

逆順を除いて、ある条件に基づいて要素の配列をソートしたい。したがって、基本的には、それが行ったであろうことは何でも、その後逆になります。

たとえば、文字列の配列があり、文字列の長さを減らして並べ替えたいとします

a = ["test", "test2", "s"]
a.sort_by!{|str| str.length}.reverse!

これは仕事をしていますが...ソートアルゴリズムが逆にそれを行うように条件を指定する方法はありますか?

4

2 に答える 2

26

長さは数値であるため、単純に否定して順序を逆にすることができます。

a.sort_by! { |s| -s.length }

簡単に否定できないものを並べ替える場合はsort!、比較を使用して手動で逆にすることができます。たとえば、通常は次のようにします。

# shortest to longest
a.sort! { |a,b| a.length <=> b.length }

ただし、順序を入れ替えて並べ替えを逆にすることができます。

# longest to shortest
a.sort! { |a,b| b.length <=> a.length }
于 2012-11-04T21:01:00.383 に答える
8

@mu is too short からの回答は素晴らしいですが、数値に対してのみ機能します。sort一般的なケースでは、次の方法に頼ることができます。

 irb> a = ["foo", "foobar", "test"]
  => ["foo", "foobar", "test"]
 irb> a.sort{|a,b| a.length <=> b.length}
 => ["foo", "test", "foobar"]
 irb> a.sort{|a,b| b.length <=> a.length}
 => ["foobar", "test", "foo"]
于 2012-11-04T21:05:28.127 に答える