例如,如果我有以下场景
如果key的范围是1-4,则选择A。如果key的范围是5-6,则选择B。
我在Java中找到了几个使用各种数据结构的答案。建议的数据结构有跳过列表/树、树映射、链表等。
它们有没有ruby实现?或者我如何在Ruby中解决这个问题?
发布于 2016-12-16 04:43:25
下面是一个可以实现此目的的类:
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
没有容易想到的用例,但至少是可能的。
发布于 2016-12-16 06:47:36
这应该是可行的:
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
https://stackoverflow.com/questions/41172246
复制相似问题