为什么"拒绝"不删除重复?

时间:2014-07-21 16:01:42

标签: ruby-on-rails ruby ruby-on-rails-3

我想根据我的哈希键删除重复的条目。我错过了什么?

这是哈希:

  @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] }

2 个答案:

答案 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}" }

基本上,为每个事件构建一个“足够独特”的字符串。