Как подсчитать количество уникальных экземпляров IP-адреса в следующей строке в ruby - PullRequest
2 голосов
/ 07 июня 2010

"10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" "10.1.3.1" ноль "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" "10.1.3.4" ноль "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" "10.1.3.10" ноль "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" "10.1.3.11" ноль "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" "10.1.3.12" ноль "10.1.3.30" "10.1.3.30" ноль "10.1.3.38" "10.1.3.38" "10.1.3.38" "10.1.3.38" "10.1.3.38" ноль "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" "10.1.3.55" ноль "10.1.3.60" "10.1.3.60" "10.1.3.60" "10.1.3.60" "10.1.3.60" "10.1.3.60" "10.1.3.60" ноль "10.1.3.66" "10.1.3.66" "10.1.3.66" "10.1.3.66" "10.1.3.66" "10.1.3.66" "10.1.3.66" ноль "10.1.3.101" "10.1.3.101" ноль "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" "10.1.3.102" ноль "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" "10.1.3.103" ноль "10.1.3.104" "10.1.3.104" ноль "10.1.3.106" "10.1.3.106" ноль "10.1.3.107" "10.1.3.107" "10.1.3.107" "10.1.3.107" "10.1.3.107" "10.1.3.107" "10.1.3.107" ноль "10.1.3.108" "10.1.3.108" "10.1.3.108" "10.1.3.108" "10.1.3.108" "10.1.3.108" ноль "10.1.3.110" "10.1.3.110" "10.1.3.110" "10.1.3.110" "10.1.3.110" ноль

указанная выше строка является стандартным:

#!/usr/bin/ruby

require "rubygems"
require "fastercsv"


scannedIPs = Hash.new(0)

count = 0
FCSV.foreach("HOUND-1.csv", :headers => true, :skip_blanks => false) do |row|

       text = row[1]
       p text

end 

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Стандартный подход к этой проблеме (проблема подсчета уникальных элементов) заключается в использовании set:

require 'set'

s = Set.new

s.add('cat')
s.add('dog')
s.add('cat')

p s.size # => 2 (because 2 unique elements)

Если вы не хотите считать nil как элемент, вам придется явно пропустить его добавление или игнорировать его в своем размере, т.е.

ary.each do |x|
  s.add(x) unless x.nil?
end
0 голосов
/ 07 июня 2010
#!/usr/bin/ruby

require "rubygems"
require "fastercsv"


scannedIPs = Hash.new(0)

count = 0
ips = []
FCSV.foreach("HOUND-1.csv", :headers => true, :skip_blanks => false) do |row|

       text = row[1]
       ips << text if text # you need the 'if text' for the nil objects.

end

num_unique = ips.uniq.length

Теперь num_unique будет иметь нужное вам значение.

Edit: Если вы хотите получить доступ к счетчику частот для определенного IP, сделайте следующее:

#!/usr/bin/ruby

require "rubygems"
require "fastercsv"


scannedIPs = Hash.new(0)

count = 0
ips = Hash.new {|h, k| h[k] = 0 }
FCSV.foreach("HOUND-1.csv", :headers => true, :skip_blanks => false) do |row|

       text = row[1]
       ips[text] += 1 if text

end

Теперь «ips» - это хэш IP-адресов и их частот. Чтобы получить доступ к конкретному, сделайте это:

ips['192.168.0.1'] #=> 0
ips['10.1.3.110'] #=> a big number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...