Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Hash
- def on(num)
- case num
- when Numeric
- result = find_all {|k, v| k.include?(num) if k.is_a?(Range) }
- case result.size
- when 0
- self[num]
- when 1
- result[0][1]
- else
- result.map {|r| r.last}
- end
- when Range
- range = num.to_a
- result = find_all {|k, v| k.respond_to?(:each) ? k.find {|i| range.include?(i) } : range.include?(k) }
- result.map {|r| r.last }
- end
- end
- end
- hash = {
- 1 => :a,
- 2..4 => :b,
- 4..8 => :c,
- [9, 10] => :d
- }
- hash.on(2) # => :b
- hash.on(4) # => [:b, :c]
- hash.on(1..5).inspect # => [:a, :b, :c]
Add Comment
Please, Sign In to add comment