更有效的不区分大小写的子字符串搜索

时间:2014-04-02 03:50:24

标签: ruby refactoring

在以下情况下,有人能告诉我更有效的url.downcase.include? "some string"方法吗?

def source
  return if url.nil?

  source = nil

  if url.downcase.include? 'techcrunch.com' or url.downcase.include? 'tcrn.ch'
    source = 'techcrunch'
  end

  source
end

我刚开始使用Ruby,所以如果您有任何其他提示,我会感激他们。

非常感谢,   帕梅拉

2 个答案:

答案 0 :(得分:1)

如果你的意思是计算效率,那么除了可能两次调用.downcase之外,你的计算效率一样好。但实际上,在这样一个简单的案例中,你不会从任何事情中得到很大改善。

如果您正在寻找一种更短的编写实现方式,这可能会尽可能短:

def source(url)
  url =~ /techcrunch\.com|tcrn\.ch/i && 'vimeo'
end

source('www.stackoverflow.com') # => nil
source('www.techcrunch.com') # => "vimeo"

答案 1 :(得分:0)

def source
  return unless url
  downcased_url = url.downcase
  'vimeo' if %w[techcrunch.com tcrn.ch].any? { |u| downcased_url.include? u }
end