例如,如果我有以下情况
如果键的范围是1-4,则选择A. 如果key的范围是5-6,则选择B.
我在Java中使用各种数据结构找到了几个答案。建议的数据结构是skiplist / tree,tree-map,linkedlist等。
是否有任何ruby实现?或者我如何在Ruby中解决这个问题?
答案 0 :(得分:0)
这是一个可以达到这个目的的课程:
class RangedKeyHash < Hash
def [](key)
case key
when 1..4
super("A")
when 5..6
super("B")
else
raise KeyError, "#{key} not valid"
end
end
end
测试:
hash = RangedKeyHash.new
hash["A"] = "value for A"
hash["B"] = "value for B"
hash[2]
# => "value for A"
hash[5]
# => "value for B"
hash[100]
# => KeyError
这不是一个容易想到的用例,但它至少是可能的。
答案 1 :(得分:0)
这应该有效:
class RangedHash
def initialize(hash)
@hash = hash.to_hash
end
def [](key)
@hash.find do |k, v|
break v if k.respond_to?(:include?) && k.include?(key) || k == v
end
end
end
用法:
hash = RangedHash.new(1..4 => 'A', 5..6 => 'B')
hash[2] => "A"
hash[5] => "B"
hash[7] => nil