Effective Rubyの勉強メモです。
Array, Hashで存在確認する
コレクションにある指定された要素が存在しているかどうかのチェックには、通常Array#include?メソッドを使うかと思います。
例えば、次のような権限クラスを考えます。権限クラスはパーミッションの配列を持ち、ある権限が特定の行動を許可するかどうかを返すcan?メソッドを持っています。
class Role def initialize(name, permissions) @name = name @permissions = permissions end def can?(permission) @permission.include?(permission) end
パーミッションが少ないときは問題ないですが、Array#include?はO(n)のオーダーで実行するのでパーミッションが増えるとパフォーマンスに問題が出てきます。(例えば、Railsアプリですべてのモデルに対してCRUDのパーミッションがあるかどうか)
続きを読む