按键过滤哈希并增加相应的值

时间:2011-11-13 22:43:17

标签: ruby

我有一个哈希:date => integer。我需要更改值,但仅限于键,满足要求:date1 < key < date2。这是一种优雅的方式吗?

2 个答案:

答案 0 :(得分:2)

尝试类似:

my_hash.each {|key, value| my_hash[key] += 1 if date1 < key and key < date2 }

答案 1 :(得分:1)

所以你要做的就是减少你的哈希值。您将遍历您的哈希并检查每个密钥,如果它满足条件,您将把该密钥放入具有新值的新哈希中,然后根据您的需要进行修改。否则,密钥将使用旧值进入新哈希。

hash.reduce({}) do |memo,iter| 
  if iter[0] < Time.now
    memo[iter[0]] = iter[1] + 1
  else 
    memo[iter[0]] = iter[1]
  end
  memo
end

这说的是迭代哈希。当您使用reduce迭代哈希时,它会将每对[key,value]传递给块。因此,iter [0]是关键,iter [1]是值。现在我们测试密钥,如果满足条件,则更改值并将密钥和新值放入新哈希中。否则,将key和old值放入哈希值。为reduce的下一次迭代返回修改后的新哈希。希望这会有所帮助。