のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

【ruby】配列Aの中に配列Bの値が含まれているか確認したい

配列Aの中に配列Bの値が一つ以上含まれているか確認したくて、ぐるぐる回せばいいかなぁと思って書いたコードが以下。
※present?はrailsのArray拡張メソッド

[1] pry(main)> list1 = %w(apple banana melon)
=> ["apple", "banana", "melon"]
[2] pry(main)> list2 = %w(watermelon grape apple)
=> ["watermelon", "grape", "apple"]

[3] pry(main)> list1.any? { |f| list2.include?(f) }
=> true

もっとシンプルにかけないかと思い、改めてArrayの仕様を確認したところ、 & で配列の共通要素を返してくれることがわかったので、書き直した。

[4] pry(main)> (list1 & list2).present?
=> true
[5] pry(main)> (list1 & list2).empty?
=> false
[6] pry(main)> (list1 & list2).any?
=> true

値が含まれない場合の結果。

[7] pry(main)> list2 = %w(watermelon grape lemon)
=> ["watermelon", "grape", "lemon"]

[8] pry(main)> list1.any? { |f| list2.include?(f) }
=> false

[9] pry(main)> (list1 & list2).present?
=> false
[10] pry(main)> (list1 & list2).empty?
=> true
[11] pry(main)> (list1 & list2).any?
=> false