查找字符串数组的最快方法

时间:2012-02-16 15:25:50

标签: ruby arrays string loops comparison

脚本必须验证大量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吗?但我想知道的是:array.include?能给我最快结果的方法吗?

5 个答案:

答案 0 :(得分:34)

您可以使用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 

答案 1 :(得分:4)

您可以使用Array #include方法返回true / false。

http://ruby-doc.org/core-1.9.3/Array.html#method-i-include-3F

if ips.include?(ip) #=> true
  puts 'ip exists'
else
  puts 'ip  doesn\'t exist'
end

答案 2 :(得分:3)

更快的方法是:

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

答案 3 :(得分:2)

你试过Array #include吗?功能

http://ruby-doc.org/core-1.9.3/Array.html#method-i-include-3F

你可以从源头看到它几乎完全相同的东西,除了本地。

答案 4 :(得分:2)

ips = ['10.10.10.10','10.10.10.11','10.10.10.12']

ip = '10.10.10.10'
ips.include?(ip) => true

ip = '10.10.10.13'
ips.include?(ip) => false

<强> check Documentaion here