ここでは、宇宙船オペレータ<=>
を使用しているときのRubyのsort
メソッドのプロセスを理解したいと思っています。誰かが助けることを願っています。以下でRubyのソート方法は、比較演算子(宇宙船)とどのように機能しますか?
:
array = [1, 2, 3]
array.sort { |a, b| a <=> b }
...私はsort
は一度に数字のペアを比較して、それらが等しいならa
はb
、0
前に属している場合-1
を返していることを理解し、または1
もしa
がb
に従うべきならば。
しかし、降順でソートする場合には、そのよう:
array.sort { |a, b| b <=> a }
...正確に何が起きているのですか? sort
はまだa <=> b
を比較し、結果を反転しますか?または、return
が-1
,0
、と逆の動作をしていると解釈していますか?言い換えれば
は、なぜこれほどのようなブロック内の変数を置くん:
array.sort { |b, a| b <=> a }
...最初の例と同じ並び替えパターンにつながりますか?
ブロック変数で指定された順序を参照として使用していますか? – vertigokidd
@vertigokidd Rubyがどの引数を最初の引数とし、どの引数を2番目の引数にするかをRubyがどのように知っていると思いますか?繰り返しになりますが、Rubyは変数名を気にしません。 – Doorknob
@vertigokidd:おそらく、Perlが['sort'ブロック](http://perldoc.perl)で使う魔法の' $ a'と '$ b'変数の前の経験によって混乱しているかもしれません。org/functions/sort.html)。 –