ruby - 如果值不在另一个哈希中,则从循环中的哈希中删除值
问题描述
我有循环读取 linux proc 文件并解析运行 PHP 进程的 utime 值。我将这些值存储到哈希(域名和 utime 值)中。在第二个数组中,我只保留实际运行 PHP 进程的域名。我需要做的是,当没有为特定域运行的 PHP 进程时(例如,域在第一个循环运行中只有 1 个 php 进程运行但它已经完成并且在第二个循环运行中没有更多的 PHP 进程为此域),我想从存储域名和 utime 的哈希中删除这条记录。我希望它足够清楚。
我尝试了以下两种方法,但都不起作用,在输出中我仍然可以看到没有进程在运行的域(之前运行,在第一个循环运行中)。
bla.delete_if {|key, value| not vhostnames.include?(key)}
bla.each{|k,_| bla.delete(k) if not vhostnames.include?(k)}
完整代码是:
bla = {}
vhostnames = []
loop do
# Here I find PHP processes and parse domain name of PHP process
....
# This is first array when I store only domain names for PHP process is running for now
vhostnames << vhostname
# Here I parse content of proc file
...
# Here I save or update value to hash
if not bla.has_key?(vhostname)
bla[vhostname] = utime_proc
else
bla.each do |key,value|
if key == vhostname
bla[key] = value + utime_proc
end
end
end
# Here is the place where I try to exclude value from array
# None of these two rows works as expected
# bla.delete_if {|key, value| not vhostnames.include?(key)}
# bla.each{|k,_| bla.delete(k) if not vhostnames.include?(k)}
# Here I print it out
bla.sort_by {|k,v| v}.reverse.each do |k,v|
puts "#{k} ---> #{v}"
end
# End loop
end
解决方案
问题解决了!我刚刚添加了一个vhostnames.clear
循环结束前,代码现在可以正常工作了!
从哈希中删除值的工作代码是这样的bla.delete_if {|key, value| not vhostnames.include?(key)}
谢谢@JagdeepSingh 的帮助。
推荐阅读
- python-3.x - 求总和,使用 for 循环遍历两个字典,将键值相乘
- c# - 真的有一个有效的代码路径,这个函数不会返回一个值吗?
- c# - 无法使用 MRTK v2.0.0-RC1 构建
- mysql - mySQL:在插入查询中插入查询值
- python - 给定一个字典和一个序列在python中返回它的总数
- sql - SQL Server 注入触发器被忽略?
- css - 如何修复我的表格的标题,使它们不会滚动
- dll - 有没有办法修复“访问冲突 - 代码 c0000005(!!!第二次机会!!!)”错误
- vue.js - vue温泉ui使用组件事件
- python - 在 PyCharm Pro 中从 Google App Engine SDK 导入时出现问题