leaning diary Rails

【Learning Diary49】Array#&/self/Array#each_cons(cnt)/範囲オブジェクト

Array#&

 

arrayクラスに使用できる論理積(AND)を求めるメソッドです。

 

両方に存在する要素が返されます。

 

>> a1 = [1,2,3]
=> [1, 2, 3]
>> a2 = [4,2,3]
=> [4, 2, 3]
>>
>> p a1 & a2
[2, 3]
=> [2, 3]
>>

 

self

selfは「自分自身を返すオブジェクト」です。

 

使用される場所によって返す値が異なってきます。

 

■クラス内で使用される場合→self=そのクラス

 

■メソッド内で使用される場合→self=そのメソッドを実行するオブジェクト(レシーバ)

 

Array#each_cons(cnt)

Array#each_cons(cnt)メソッドは、selfから引数(cnt)ずつ要素を取り出しブロックに渡します。

 

ブロック引数には配列で渡されます。

 

sliceとは出力結果が異なるので注意します。

 

>> (1..10).each_cons(3) {|arr| p arr }
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
=> 1..10

>> (1..10).each_slice(3) {|arr| p arr }
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
=> 1..10
>>

 

範囲オブジェクト

 

.. 終端を含む

... 終端を含まない

マイナスは後ろから要素を指定できる。

 

>> puts str[4..6]
efg
=> nil
>> puts str[-3..6]
fg
=> nil
>> puts str[4...-1]
efg
=> nil
>> puts str[4..0]

=> nil
>> puts str[-4...7]
efg
=> nil

 

 

-leaning diary, Rails