我试图通过将字符串拆分成一个字母数组,然后将元音字母映射到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?部分不能正确返回10。有什么建议说为什么这不会飞?
我把它改成了这个版本,但看起来有点傻:
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

10-06 07:42