我试图通过将字符串拆分成字母数组然后将元音字母映射到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
答案 0 :(得分:6)
原因:
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
答案 1 :(得分:1)
您不需要map
。
def count_vowels(string)
vowels = %w[a e i o u]
string.chars.select{|n| vowels.include? n}.size
end
答案 2 :(得分:0)
在这种情况下,您需要R
方法参数的parantheses。所以
include?
无论如何,你的代码可能会更好
return string.split("").map{ |n| vowels.include?(n) }.inject(0) do |mem,x|
VOWELS = %w(a e i o u) # string's array
=> string.split("")
请注意,您的方法可能如此:
string.chars