我试图通过将字符串拆分成一个字母数组,然后将元音字母映射到1
并对数组进行求和来计算字符串中的元音数。
def count_vowels(string)
vowels = ['a','e', 'i', 'o', 'u']
return string.split("").map{ |n| vowels.include? n ? 1 : 0}.inject(0,:+)
end
include?
部分不能正确返回1
或0
。有什么建议说为什么这不会飞?我把它改成了这个版本,但看起来有点傻:
def count_vowels(string)
vowels = ['a','e', 'i', 'o', 'u']
return string.split("").map{ |n| vowels.include? n}.inject(0) do |mem,x|
x ? mem + 1 : mem
end
end
最佳答案
原因:
string.split("").map{ |n| vowels.include? n ? 1 : 0}.inject(0,:+)
不起作用是因为
n ? 1 : 0
被计算并作为参数传递给include?
而不是n
。您需要在include?
中添加一些括号:string.split("").map{ |n| vowels.include?(n) ? 1 : 0}.inject(0,:+)
你可以简单地
def count_vowels(string)
vowels = ['a','e', 'i', 'o', 'u']
string.split(//).select { |x| vowels.include? x }.length
end