我有一个哈希:date => integer
。我需要更改值,但仅限于键,满足要求:date1 < key < date2
。这是一种优雅的方式吗?
答案 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的下一次迭代返回修改后的新哈希。希望这会有所帮助。