ようへいの日々精進XP

よかろうもん

2018 年 01 月 28 日(日)

ジョギング

  • 休み
  • 走らない代わりにストレッチを 20 min 程

日課

  • (腕立て x 40 + 腹筋 x 30) x 3

最近, 単に興味がある分野の本とか殆ど読んでいなかったので, Kindle の Prime Reading で以下の本をレンタル.

食べる!SSL! ―HTTPS環境構築から始めるSSL入門

食べる!SSL! ―HTTPS環境構築から始めるSSL入門

ビットコイン解説本

ビットコイン解説本

暇を見てちょこちょこ読んでいくつもり.

今日のるびぃ ~ <=> メソッド ~

sort メソッドと一緒に利用されているのを見かける <=> について.

ググると <=> は比較演算子と書かれている記事をよくみるけど, ドキュメントを見ると主要なクラスのインスタンスメソッドとして定義されている.

他にも色々と.

このメソッドの基本的な挙動として...(Integer#<=> より引用)

self と other を比較して、self が大きい時に1、等しい時に 0、小さい時 に-1、比較できない時に nil を返します。

のように, 左辺 (self) と右辺 (other) の要素を比較して, 左辺が大きければ 1 を返し, 等しい場合には 0 を返し, 小さい場合には -1 を返すメソッド(だと思う).

[9] pry(main)> 3 <=> 1
=> 1
[10] pry(main)> 3 <=> 4
=> -1
[11] pry(main)> 3 <=> 3
=> 0

もちろん, クラスによって比較する要素が String だったり, Array だったりするが, 返り値として同じ. 例えば, Array#<=> だと以下のように比較される.(Array#<=> より引用)

自身と other の各要素をそれぞれ順に <=> で比較していき、結果が 0 でなかった場合に その値を返します。各要素が等しく、配列の長さも等しい場合には 0 を返します。 各要素が等しいまま一方だけ配列の末尾に達した時、自身の方が短ければ -1 をそうでなければ 1 を返します。

Array#sort との組み合わせ.

[22] pry(main)> ary = ["ab", "cdef", "ghi", "j"]
=> ["ab", "cdef", "ghi", "j"]
[23] pry(main)> ary.sort
=> ["ab", "cdef", "ghi", "j"]
[24] pry(main)> ary.sort {|a, b| a.size <=> b.size }
=> ["j", "ab", "ghi", "cdef"]
[25] pry(main)> ary.sort {|a, b| a <=> b }
=> ["ab", "cdef", "ghi", "j"]

ふむふむ.