2014-04-02 37 views
0

任何人都可以告诉我一个更有效的方法来做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,所以如果你有任何其他的提示,我会很感激他们。

太感谢你了, 帕梅拉

+0

当然,你应该寻找“techcrunch.com'第一,如果你相信它是更可能会比'tcrn.ch'存在;否则,首先搜索'tcrn.ch'。至于提示,习惯于阅读Ruby方法的文档。方法如下所示:'klass_name#method_name'。在这里,例如,您正在使用方法[String#include?](http://www.ruby-doc.org/core-2.1.0/String.html#method-i-include-3F)。 –

回答

1

如果你的意思是计算效率你的是约尽善尽美也许除了呼吁.downcase两次。但是,真正表现明智的是,在这种简单的情况下,你不会从任何方面获得太多改善

如果您正在寻找写你实现更短的方式,这大概是尽可能短:

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

source('www.stackoverflow.com') # => nil 
source('www.techcrunch.com') # => "vimeo" 
0
def source 
    return unless url 
    downcased_url = url.downcase 
    'vimeo' if %w[techcrunch.com tcrn.ch].any? { |u| downcased_url.include? u } 
end