Ruby Iterator - 定义一个接受数组和字符串的方法

时间:2013-02-05 21:08:28

标签: ruby

我想定义一个接受数组和字符串的方法,然后它应该找到数组中以提供的字符串开头的所有字符串:example array [“Jamaica”,“Japan”,“USA” “,“中国”];如果提供的字符串是Ja,那么它应该返回牙买加和日本

4 个答案:

答案 0 :(得分:2)

尝试使用keep_if和正则表达式:

["Jamaica","Japan","USA","China"].keep_if { |c| c =~ /^ja/i }

# returns ["Jamaica", "Japan"]

这是一个静态的例子。要动态创建正则表达式,请执行Regexp.new("^#{your_var}", true)

答案 1 :(得分:0)

这有点矫枉过正,但它可以快速适用于大型阵列。幸运的是,我昨天偶然发现了一个名为TRIEZ的红宝石新高速trie库。运行gem install triez然后从他们的示例中稍微切换一下:

require 'triez'
countries = ["Jamaica","Japan","USA","China"]
t = Triez.new
countries.each do |word|
  t[word] = 1
end

ja_countries = []
t.search_with_prefix 'Ja' do |suffix|
  ja_countries += "Ja#{suffix}"
end

它是用C语言实现的,所以我敢打赌它在巨大阵列上的速度很快。

答案 2 :(得分:0)

在Array的文档中找不到数组最重要的方法,但在Enumerable的文档中找不到。您正在搜索查找符合某些条件的所有元素的方法。

这种情况是字符串某些字符开头。如果string object有一个方法,这不是很好吗?

答案 3 :(得分:0)

你可以使用许多不同的东西来做这件事,如果你不想修改数组,可以使用Array Class中的select方法。

["Jamaica","Japan","USA","China"].select{|item| item.match("Ja")}

数组将完整无缺。