Подтвердить что ты не робот

Самый быстрый способ найти строку в массив строк

script должен проверить, присутствует ли один предопределенный IP-адрес в большом массиве IP-адресов. В настоящее время я кодирую эту функцию следующим образом (говоря, что "ips" - это мой массив IP, а "ip" - предопределенный ip)

ips.each do |existsip|
  if ip == existsip
    puts "ip exists"
    return 1
  end
end
puts "ip doesn't exist"
return nil

Есть ли более быстрый способ сделать то же самое?

Правка: Я, возможно, неправильно выразился. Я могу сделать array.include? но я хотел бы знать: Is array.include? метод, который даст мне самый быстрый результат?

4b9b3361

Ответ 1

Вы можете использовать Set. Он реализован поверх Hash и будет быстрее для больших наборов данных - O (1).

require 'set'
s = Set.new ['1.1.1.1', '1.2.3.4']
# => #<Set: {"1.1.1.1", "1.2.3.4"}> 
s.include? '1.1.1.1'
# => true 

Ответ 3

Более быстрый способ:

if ips.include?(ip)
  puts "ip exists"
  return 1
else
  puts "ip doesn't exist"
  return nil
end