TechNote

事務屋のおぼえがき

【Ruby】Array#rassocの動き

問題集駆動学習。解説にある説明だけではrassocの動きがよくわからないので、挙動から探る。

rassocの説明

rssocメソッドは配列の配列を検索します。その1番目の要素が引数に渡っている要素と等しい最初の要素を返します。

実際の動き

obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.rassoc(1)

# ⇒nil
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.rassoc(2)

# ⇒[1,2]
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.rassoc(3)

# ⇒nil
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.rassoc(4)

# ⇒[3,4]

まだつかめない。
そういえば、そもそもassocの動きを知らなかった。

assocの説明

配列の配列を検索して、その 0 番目の要素が key に == で等しい最初の要素を返します。該当する要素がなければ nil を返します。

実際の動き

obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.assoc(1)

# ⇒[1,2]
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.assoc(2)

# ⇒nill
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.assoc(3)

# ⇒[3,4]
obj = [[1, 2], [3, 4], [5, 6], [7, 8]]
p obj.assoc(4)

# ⇒nil

なるほど。順序を踏んで学んでいたらなんてことはない。
assocの説明で「0番目」との表現がでてきたからわかった。rassocの説明には「1番目の要素」ではなくて「インデックス1」という表現が欲しいところ。

f:id:kojikoji75:20211225110226p:plain