我有一个散列:date => integer
。我需要更改这些值,但只针对键,以满足以下要求:date1 < key < date2
。做这件事最优雅的方式是什么?
发布于 2011-11-13 22:45:47
尝试如下所示:
my_hash.each {|key, value| my_hash[key] += 1 if date1 < key and key < date2 }
发布于 2011-11-13 23:03:21
所以你要做的就是减少你的哈希值。您将遍历您的散列并检查每个键,如果它满足条件,您将把该键放入具有新值的新散列中,并根据您的喜好进行修改。否则,键将进入具有旧值的新散列中。
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遍历散列时,它会将每对键、值传递给块。因此,iter是关键,iter1是价值。现在我们对键进行测试,如果满足条件,则更改值,并将键和新值放入新的散列中。否则,将键和旧值放入散列中。修改后的新散列将为reduce的下一次迭代返回。希望这能有所帮助。
https://stackoverflow.com/questions/8115359
复制相似问题