例如,如果我有以下情形红宝石:基于范围
如果key范围1-4,然后选择A. 如果关键是范围从5-6的数据结构键查找然后选择B.
我在Java中发现了几个使用各种数据结构的答案。建议的数据结构是skiplist/tree,树形图,链表等。
是否有任何ruby实现它们?或者我如何在Ruby中解决这个问题?
例如,如果我有以下情形红宝石:基于范围
如果key范围1-4,然后选择A. 如果关键是范围从5-6的数据结构键查找然后选择B.
我在Java中发现了几个使用各种数据结构的答案。建议的数据结构是skiplist/tree,树形图,链表等。
是否有任何ruby实现它们?或者我如何在Ruby中解决这个问题?
下面是一类能达到这个目的:
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
这里没有,很容易想到一个用例,但它有可能至少。
这应该工作:
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
您可以使用[?范围#包括(http://ruby-doc.org/core-2.3.3/Range .html#method-i-include-3F) –
我想用范围指向的范围传递给范围。 – LOCKLOCK