ブログ
【Ruby】【ちょっと検索しにくい】Arrayクラスの&メソッドについて
はじめに
論理演算子の&&
は馴染み深いのですが、アンパサンドひとつだけの&
って何だっけと思ったことがあったので、まとめてみることにしました。
&メソッドとは?
&
メソッドは、Arrayクラスのインスタンスメソッドです。複数の配列から共通する要素を取り出すことができます。
下記のような積集合の図を思い浮かべていただくとイメージしやすいと思います。
参考:集合(Wikipediaより)https://ja.wikipedia.org/wiki/%E9%9B%86%E5%90%88
Ruby 3.2 リファレンスマニュアル ライブラリ一覧 組み込みライブラリ Arrayクラス & instance method Array#&
使いかた
例えば、2人の好きな食べ物を比較して共通の好物を取り出してみます。
doraemon_favorite_foods = ['どら焼き', '饅頭', 'おにぎり', 'メロンパン']
friend_favorite_foods = ['おにぎり', 'どら焼き', 'アイスクリーム', 'ラーメン']
common_foods = doraemon_favorite_foods & friend_favorite_foods
puts "共通の好物: #{common_foods}"
#=> 共通の好物: ["どら焼き", "おにぎり"]
このように&
を用いて配列を比較します。
この例では、doraemon_favorite_foods
(ドラえもんの好物)と friend_favorite_foods
(友達の好物)の積集合を求め、共通の好物を取得しています。
この結果として、["どら焼き", "おにぎり"]
が取得できています。
また、次のようなケースだとどうなるでしょうか。
doraemon_favorite_foods = ['どら焼き', 'どら焼き', 'どら焼き', 'どら焼き', '饅頭', 'おにぎり', 'メロンパン']
friend_favorite_foods = ['おにぎり', 'どら焼き', 'アイスクリーム', 'ラーメン']
common_foods = doraemon_favorite_foods & friend_favorite_foods
puts "共通の好物: #{common_foods}"
#=> 共通の好物: ["どら焼き", "おにぎり"]
先ほどと同じように["どら焼き", "おにぎり"]
が取得できました。
このようにドラえもんのどら焼き愛が高まりすぎた場合は、重複要素を取り除いてくれます。
ちなみに、友達が熱狂的などら焼きファンだったとしても同じ結果が得られます。
(重複要素を除外したくない場合は、自前で実装する必要がありそうです)
doraemon_favorite_foods = ['どら焼き', 'どら焼き', 'どら焼き', 'どら焼き', '饅頭', 'おにぎり', 'メロンパン']
friend_favorite_foods = ['おにぎり', 'どら焼き', 'どら焼き', 'アイスクリーム', 'ラーメン', 'どら焼き']
common_foods = doraemon_favorite_foods & friend_favorite_foods
puts "共通の好物: #{common_foods}"
#=> 共通の好物: ["どら焼き", "おにぎり"]
まとめ
Rubyの積集合演算子&
で、異なる配列の共通要素を簡潔に取り出すことができました。
また、重複する要素は取り除かれることもわかりました。
ちょっと検索しにくいメソッド名なのですが、シンプルな記述でとても便利だなと思います。
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!