如何制作更多美容红宝石代码来计算flatten Array中的多个项目

时间:2017-10-31 17:56:32

标签: arrays ruby count

我想计算DE以及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')不起作用。

4 个答案:

答案 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(不是nilfalse)值的元素数量。

%w()是一个很好的语法,用于定义字符串的数组 - 即以下内容是等效的:

['D', 'E', 'F'] == %w(D E F)

答案 3 :(得分:0)

你很亲密。它实际上非常简单,使用了String#count的一个鲜为人知的功能:

'DEF'.count('DEF') #=> 3
'FEED ME'.count('DEF') #=> 5