首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby:基于范围的数据结构中的键查找

Ruby:基于范围的数据结构中的键查找
EN

Stack Overflow用户
提问于 2016-12-16 03:50:32
回答 2查看 90关注 0票数 0

例如,如果我有以下场景

如果key的范围是1-4,则选择A。如果key的范围是5-6,则选择B。

我在Java中找到了几个使用各种数据结构的答案。建议的数据结构有跳过列表/树、树映射、链表等。

它们有没有ruby实现?或者我如何在Ruby中解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2016-12-16 04:43:25

下面是一个可以实现此目的的类:

代码语言:javascript
运行
复制
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

测试:

代码语言:javascript
运行
复制
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

没有容易想到的用例,但至少是可能的。

票数 0
EN

Stack Overflow用户

发布于 2016-12-16 06:47:36

这应该是可行的:

代码语言:javascript
运行
复制
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

用法:

代码语言:javascript
运行
复制
hash = RangedHash.new(1..4 => 'A', 5..6 => 'B')

hash[2] => "A"    
hash[5] => "B"  
hash[7] => nil 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41172246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档