6

sortスペースシップ オペレーターを使用する際の Ruby のメソッドの背後にあるプロセスを理解したいだけの初心者プログラマーです<=>。誰かが助けてくれることを願っています。

以下では:

array = [1, 2, 3]
array.sort { |a, b| a <=> b }

...一度に数値のペアを比較し、 の前に属している場合、それらが等しい場合、または続く必要がある場合sortに返すことを理解しています。-1ab01ab

ただし、降順でソートする場合は、次のようになります。

array.sort { |a, b| b <=> a }

…いったい何が起きているの?sortそれでも結果を比較a <=> bしてから反転しますか? それとも、returnの を解釈していて-1、逆の動作をしていますか?01

言い換えれば、変数をブロックに次のように配置する理由は次のとおりです。

array.sort { |b, a| b <=> a }

...最初の例と同じ並べ替えパターンになりますか?

4

2 に答える 2

2

並べ替えはこれを行うだけです:

comparison_block.call(elem[i],elem[j])

ブロックが内部的にどのように見えるかは知りませんが、最初の引数として渡された要素と 2 番目の引数として渡された要素はわかっており、それが結果の基になっています。通常の数値昇順ソートでは、(1,0) でブロックを呼び出すと 1 が返されます。(0,1) で呼び出すと、-1 が返されます。順序が重要です。

于 2013-05-17T02:06:36.913 に答える