Rails

【Rails】配列の共通要素を取得するintersectionメソッドについてまとめてみた

Rails

 

今回は配列の共通要素を取得するintersectionメソッドについてまとめました。これまで使ったことがなかったメソッド、かつ最近知ったメソッドでもあるので自身の備忘録としてもまとめています。

Ruby3.1からは配列の共通要素の有無を判定するintersect?メソッドも追加されています。

intersectionメソッドとは

intersectionメソッドとは配列の共通要素を取得するメソッドです。

[ 1, 2 ].intersection([ 1 ])
=> [ 1 ]
[ 1, 2, 3 ].intersection([ 1, 2 ])
=> [ 1, 2 ]

 

要素が重複する場合はそのうち1つを返します。

[ 1, 1, 2 ].intersection([ 1 ])
=> [ 1 ]
[ 1, 2, 2, 3 ].intersection([ 1, 2 ])
=> [ 1, 2 ]

 

返される要素の順序はレシーバの順序を維持します。

[ 1, 2, 3 ].intersection([ 2, 1 ])
=> [ 1, 2 ]
[ 1, 2, 2, 3, 4 ].intersection([ 4, 1 ])
=> [ 1, 4 ]

intersect?メソッドとは

intersect?メソッドとは配列の共通要素の有無を判定するメソッドです。共通要素が少なくとも1つあればtrueを、なければfalseを返します。

[ 1, 2, 3 ].intersect?([ 3, 4, 5 ])
=> true
[ 1, 2, 3 ].intersect?([ 4, 5, 6 ])
=> false

intersect?メソッドはRuby3.1から追加されたメソッドですが、それ以前はempty?メソッドやany?メソッドをチェーンさせて判定していました。

[ 1, 2 ].intersection([ 1 ]).any?
=> true

[ 1, 2 ].intersection([ 1 ]).empty?
=> true

まとめ

  • intersectionメソッドとは配列の共通要素を取得するメソッド
  • intersect?メソッドとは配列の共通要素の有無を判定するメソッド

参考

 

今回は配列の共通要素を取得するintersectionメソッドについてまとめました。そこまで利用場面は多くないメソッドかと思いますが、こういった便利メソッドを知っておくといつか役に立ちそうですね。