Techioz Blog

Ruby でキーが範囲であるハッシュ内の単一の整数を使用した検索

概要

hash = {
   0..25  => { low_battery_count:     13 }, 
  26..75  => { average_battery_count:  4 }, 
  76..100 => { good_battery_count:     4 }
}

ここで、必要なのは、値 (20、30 などの整数) を渡すと、この整数が存在する範囲に対する値を返すメソッド (できれば組み込みのメソッド) です。

例えば:

method(3) #=> {:low_battery_count=>13}
method(35) #=> {:average_battery_count=>4}
method(90) #=> {:good_battery_count=>4}

解決策

このハッシュには find を使用できます

BATTERIES = {
  0..25  => { low_battery_count:     13 }, 
  26..75  => { average_battery_count:  4 }, 
  76..100 => { good_battery_count:     4 }
}

def get_batteries_count(value)
  BATTERIES.find { |range, _| range.include?(value) }&.last
end
get_batteries_count(3) #=> {:low_battery_count=>13}
get_batteries_count(35) #=> {:average_battery_count=>4}
get_batteries_count(90) #=> {:good_battery_count=>4}
get_batteries_count(2000) #=> nil