ホーム DoRuby 配列同士のinclude
 

配列同士のinclude

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

プログラムを書いていて少し迷ったことがあったので書いていきます。

arr_1 = [1, 2, 4, 5, 5, 8, 9]
arr_2 = [2, 5, 8]

arr_1の中のものからいくつか選んだものがarr_2に入っている」という状態で、
arr_2arr_1の中身の組み合わせで成り立っているかを調べる必要がありました。


rubyでは配列同士は「-」演算子で差分を取れるのを知っていたので

(arr_2 - arr_1).empty?

このようにチェックをしようとしたのですがこのやり方だと…

arr_1 = [1, 2, 4, 5, 5, 8, 9]
arr_2 = [2, 2, 2, 5]

arr_2 - arr_1
=> []

こんな感じに重複した値がすべて消し去られてしまいます。
自分の場合は重複したものも個別に判定する必要があったのでこれではまずいです。

どうせ便利なメソッドがあるだろうと探しましたが見当たらなかったので自分で作ることにしました。

class Array

  def include_of_array(arr)
    temp = self.dup
    arr.each do |value|
       idx = temp.index(value)
       # 見つからなければ終了
       return false if idx.blank?
       temp.delete_at(idx)
     end    
     return true
  end  

end
arr_1 = [1, 2, 4, 5, 5, 8, 9]
arr_2 = [2, 2, 2, 5]

arr_1.include_of_array(arr_2)
=> false

arr_1.include_of_array([1, 5, 5, 9])
=> true

一件落着です。

記事を共有
モバイルバージョンを終了