Guest User

Untitled

a guest
Apr 24th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. class Hash
  2. def on(num)
  3. case num
  4. when Numeric
  5. result = find_all {|k, v| k.include?(num) if k.is_a?(Range) }
  6.  
  7. case result.size
  8. when 0
  9. self[num]
  10. when 1
  11. result[0][1]
  12. else
  13. result.map {|r| r.last}
  14. end
  15. when Range
  16. range = num.to_a
  17. result = find_all {|k, v| k.respond_to?(:each) ? k.find {|i| range.include?(i) } : range.include?(k) }
  18. result.map {|r| r.last }
  19. end
  20. end
  21. end
  22.  
  23. hash = {
  24. 1 => :a,
  25. 2..4 => :b,
  26. 4..8 => :c,
  27. [9, 10] => :d
  28. }
  29.  
  30. hash.on(2) # => :b
  31. hash.on(4) # => [:b, :c]
  32. hash.on(1..5).inspect # => [:a, :b, :c]
Add Comment
Please, Sign In to add comment