- Published on
Rubyで配列の集合演算
- Authors
- Name
- Shou Arisaka / 有坂翔
Rubyで配列の集合演算を行い、Ruby on Railsのモデルで例を紹介します。積集合、和集合、差集合について、Ruby言語から配列の操作を行います。
例えば、複数のキーワードの両方を含むWebページの一覧は積集合を求めていることになり、複数のキーワードのいずれかを含むWebページの一覧は和集合を求めていることになる。
p a & b # 積集合
p a | b # 和集合
p a - b # 差集合
Railsで具体例を上げてみる。
Hashmodel.where(title:"title").ids
=> [1, 2]
Hashmodel.tagged_with("fuga").by_join_date.ids
=> [6, 1]
# titleが"title"でありかつ、"fuga"というタグがつけられているhashmodelのidを取得する(積集合)
Hashmodel.where(title:"title").ids & Hashmodel.tagged_with("fuga").by_join_date.ids
=> [1]
# 和集合;OR検索された場合を求める
Hashmodel.where(title:"title").ids | Hashmodel.tagged_with("fuga").by_join_date.ids
=> [1, 2, 6]
# ちなみに`+`を使用すると、配列がマージされる形になる。値が重複しているので、和集合ではない。
Hashmodel.where(title:"title").ids + Hashmodel.tagged_with("fuga").by_join_date.ids
=> [1, 2, 6, 1]
Ruby: 集合演算を行うには? - Build Insiderでは、集合の類似度を求めるジャッカード係数などについても紹介されている。 興味があれば読んでみるといいかもしれません。