我想根据我的哈希键删除重复的条目。我错过了什么?
这是哈希:
@ips_events += [timestamp: ips_timestamp,hostname: ips_hostname,signature_id: sig_id,signature_name: sig_name,
protocol: sig_protocol, attacker: ips_attacker_ip,attacker_port: ips_attacker_port,
target: ips_target,target_port: ips_target_port]
我尝试根据[signature_id: sig_id, attacker: ips_attacker_ip, target: ips_target]
键删除所有重复项:
@filtered_ips_events = @ips_events.reject { |k| k[signature_id: sig_id, attacker: ips_attacker_ip, target: ips_target] }
答案 0 :(得分:2)
拒绝没有任何背景知道已经存在或不存在的内容以删除重复项。
使用uniq
方法,并提供有关该行的唯一方法,例如:
@ips_events.uniq { |e| [e[:signature_id], e[:attacker], e[:ips_target]] }
应该让你到达你需要的地方。
答案 1 :(得分:0)
什么使事件重复?我将在这里假设相同的时间戳和签名....请注意,这可能不是大型数据集的最佳选择,但是为了快速而肮脏,它可以完成工作。
@filtered_ips_events = @ips_events.uniq{ |event| "#{event.timestamp} #{event.signature_id}" }
基本上,为每个事件构建一个“足够独特”的字符串。