首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'floor’值的哈希?

‘'floor’值的哈希?
EN

Stack Overflow用户
提问于 2015-06-08 12:37:52
回答 3查看 147关注 0票数 2

我有一个默认值为0:Hash.new(0)的散列。

假设一个整数值,是否有一种方法来设置一个“地板”,例如,如果该值在地板下面,则返回该地板吗?

示例:

代码语言:javascript
复制
h = Hash.new(0)
h.floor = 0

h[:five] += 5
h[:five] 
#=> 5

h[:negative_five] -= 5
h[:negative_five] 
#=> 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-08 13:13:40

下面是一个可能的实现

代码语言:javascript
复制
class MyHash < Hash
    attr_writer :floor

    def [](key)
        # you can use one of those two lines or your own code in case the floor hasn't been define
        # raise 'floor value must be defined' if @floor.nil?
        # super key if @floor.nil?
        value = (fetch(key) < @floor ? @floor : fetch(key))
    end
end
票数 7
EN

Stack Overflow用户

发布于 2015-06-08 14:36:05

下面是一个新的实现,它反映了不应将任何值存储在下限以下:

代码语言:javascript
复制
class FlooredHash < Hash
  attr_writer :floor

  def floor
    @floor || -(2 ** 32) # setting the default floor for all FlooredHashes
  end

  def []=(key, value)
    super(key, [value, floor].max)
  end
end

请注意,如果需要,您也必须重新定义#store

票数 2
EN

Stack Overflow用户

发布于 2015-06-08 13:33:03

现在我用这个:

代码语言:javascript
复制
def enforce_floor!(hash, floor)
  hash.each do |key, value|
    hash[key] = floor if value < floor
  end
end

它很有效,但我认为也许有一个更优雅的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30709390

复制
相关文章

相似问题

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