配列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