お世話になります。Ruby技術者認定試験合格教本Goldの問題において理解できない部分があったので質問します。
###問題のコード
Ruby
1x = ["abc", "defgk", "lopq"] 2 3p x.sort{ |a, b| a.size <=> b.size } #=> ["abc", "lopq", "defgk"] 4p x.sort{ |a, b| a.size - b.size } #=> ["abc", "lopq", "defgk"] 5 6#どちらも同じ実行結果です。
###わからなかった点
このsortメソッドの挙動についてですが、リファレンスを読んでも、どのように並び替えが起きているのかが理解できませんでした。
例えば<=>を使用した場合ですが以下のような認識であっていますでしょうか?
-
a.size
とb.size
で、それぞれの文字列のサイズを抽出
-
- ブロック引数
|a, b|
にabc
とdefgk
が代入される
- ブロック引数
-
- その値が<=>によって
負
、0
、正
のどれかに評価される
- その値が<=>によって
-
- 負であれば
abc
、defgk
と並ぶことが確定する
- 負であれば
-
- 引き続き、
defgk
とlopg
が評価される
- 引き続き、
-
- ...続く
そしてなぜa.size - b.size
で<=>と同じような並び替えが起きるのかも理解できませんでした。お手数ですが、何か理解するためのヒントをいただければ幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 05:37