我有一个字符串,例如:
'This is a test string'
和一个数组:
['test', 'is']
我需要找出数组中有多少元素存在于字符串中(在这种情况下,它将是2)。这样做的最佳/红宝石方式是什么?此外,我这样做了数千次,所以请记住效率。
到目前为止我尝试了什么:
array.each do |el|
string.include? el #increment counter
end
由于
答案 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)
答案 4 :(得分:0)
如果字符串或数组中没有重复项,则会执行以下操作。
str = "This is a test string"
arr = ["test", "is"]
match_count = arr.size - (arr - str.split).size # 2 in this example