Ruby count来自数组的字符串中的匹配数

时间:2012-10-12 13:33:06

标签: ruby

我有一个字符串,例如:

'This is a test string'

和一个数组:

['test', 'is']

我需要找出数组中有多少元素存在于字符串中(在这种情况下,它将是2)。这样做的最佳/红宝石方式是什么?此外,我这样做了数千次,所以请记住效率。

到目前为止我尝试了什么:

array.each do |el|
 string.include? el #increment counter
end

由于

5 个答案:

答案 0 :(得分:6)

['test', 'is'].count{ |s| /\b#{s}\b/ =~ 'This is a test string' }

编辑已针对完整字词匹配进行了调整。

答案 1 :(得分:2)

你的问题很模糊。

如果您正在计算事件数,那么:

('This is a test string'.scan(/\w+/).map(&:downcase) & ['test', 'is']).length

如果你在计算代币,那么:

(['test', 'is'] & 'This is a test string'.scan(/\w+/).map(&:downcase)).length

您可以使用Array#&(或Hash)将Set替换为某些操作,从而进一步加快计算速度。

答案 2 :(得分:1)

['test', 'is'].count { |e| 'This is a test string'.split.include? e }

答案 3 :(得分:0)

凯尔的回答给了你简单实用的工作方式。但是看一下,请允许我注意,当n(字符串长度和/或匹配字符串数量)攀升到数百万时,存在更有效的算法来解决您的问题。我们commonly encounter such problems in biology

答案 4 :(得分:0)

如果字符串或数组中没有重复项,则会执行以下操作。

str = "This is a test string"
arr = ["test", "is"]

match_count = arr.size - (arr - str.split).size # 2 in this example