我想计算D
和E
以及F
总共包含数组ary
的数量。
我可以像
那样做ary.count('D') + ary.count('E') + ary.count('F')
或喜欢
count = 0
'DEF'.split('').each do |letter|
count += ary.count(letter)
end
count
但两者对我来说都不是很聪明,红宝石有更好的方法吗?不幸的是,.count('D','E','F')
不起作用。
答案 0 :(得分:3)
你可以使用正则表达式。
['D', 'E', 'F']
您可以轻松地从数组{{1}}构建此正则表达式,但我会将其留给您。
答案 1 :(得分:3)
如果您只是简单地计算字母,那就非常简单了:
letters = 'AEIOU'.chars
matches = 'FISSION'.chars.grep(Regexp.union(letters)).count
这对于以区分大小写的方式匹配单个字母实例非常有用。这里Regexp.union
创建一个匹配任何这些字母的正则表达式。
答案 2 :(得分:1)
您可以将阻止传递给Array#count
,如下所示:
ary.count { |item| %w(D E F).include?(item) }
这将返回块返回truthy(不是nil
或false
)值的元素数量。
%w()
是一个很好的语法,用于定义字符串的数组 - 即以下内容是等效的:
['D', 'E', 'F'] == %w(D E F)
答案 3 :(得分:0)
你很亲密。它实际上非常简单,使用了String#count
的一个鲜为人知的功能:
'DEF'.count('DEF') #=> 3
'FEED ME'.count('DEF') #=> 5