Ruby 检查单个数组中的所有值是否存在于字符串中

Ruby 检查单个数组中的所有值是否存在于字符串中,ruby,arrays,string,Ruby,Arrays,String,对于字符串中的所有元音,我试图打印元音的数量。如果我将元音的每个实例都推到一个新数组中,那么数组的长度+1就是答案。我不知道我的推动是否失败了。任何帮助都将不胜感激 def count_vowels(string) arr = ['a', 'e', 'i', 'o', 'u'] letters = string.split("") letters.each do |x| if x == arr.any? vowels = vowels.push(x)

对于字符串中的所有元音,我试图打印元音的数量。如果我将元音的每个实例都推到一个新数组中,那么数组的长度+1就是答案。我不知道我的推动是否失败了。任何帮助都将不胜感激

def count_vowels(string)
  arr = ['a', 'e', 'i', 'o', 'u']
  letters = string.split("")
  letters.each do |x|
    if x == arr.any?
      vowels = vowels.push(x) 
      print vowels.length
    else
      print 0
    end
end

一旦您对Ruby更加熟悉,您就会意识到对于您试图完成的事情,有比“每个”更有用的方法,比如计算字符串中的元音。例如:

my_string = 'Hey there'

def how_many_vowels_has(this_string)
  this_string.scan(/[aeiou]/).size
end

p how_many_vowels_has(my_string) #=> 3
或者您可以调用字符串#根据字符串本身计数:

my_string = 'Hey there'
p my_string.count('aeiou') #=> 3

从我所看到的,您需要花更多的时间学习可枚举的工作原理、范围以及Ruby中的一切都是对象这一事实。另外,用“Ruby”的方式解决问题,使用该语言提供的结构。

一旦你对Ruby更加熟悉,你就会意识到对于你试图完成的事情,有比“每个”更有用的方法,比如计算字符串中的元音。例如:

my_string = 'Hey there'

def how_many_vowels_has(this_string)
  this_string.scan(/[aeiou]/).size
end

p how_many_vowels_has(my_string) #=> 3
或者您可以调用字符串#根据字符串本身计数:

my_string = 'Hey there'
p my_string.count('aeiou') #=> 3

从我所看到的,您需要花更多的时间学习可枚举的工作原理、范围以及Ruby中的一切都是对象这一事实。另外,用“Ruby”的方式解决问题,使用该语言提供的结构。

问题在于
arr.any?
它没有做你认为它做的事情

根据文件:

将集合的每个元素传递给给定的块。方法 如果块返回的值不是false或nil,则返回true


相反,如果arr.include,您想使用
?x

问题在于
arr.any?
它没有做你认为它做的事情

根据文件:

将集合的每个元素传递给给定的块。方法 如果块返回的值不是false或nil,则返回true


相反,如果arr.include,您想使用
?x

说到更有用的方法来计算字符串中的元音,这就是我们的目的:
这个字符串.count('aeiou')#=>3
编辑了我的答案来添加这个,谢谢@jordan实际上,应该是
这个字符串.downcase.count('aeiou')
或者
这个字符串.count('aaeeioouu')
。我的错,谢谢。我正在学习一些入门教程,但实践问题要求您使用提供的信息来解决它们。这变得很有挑战性,因为你的代码显然更简洁、更有效,但想法是学习如何像计算机一样思考。不管怎样,这都会让人有点沮丧。谢谢您的帮助。@GeraldAnekwe这是有道理的,但我们很难给您提供仅使用您目前掌握的信息的建议,因为我们不知道您目前掌握的信息。说到更有用的方法来计算字符串中的元音,这就是我们的用途:
this_string.count('aeiou'))#=>3
编辑了我的答案,也添加了这个,谢谢@jordan实际上,应该是
这个字符串.downcase.count('aeiou')
或者
这个字符串.count('aaeeiiouu')
。我的错,谢谢。我正在学习一些入门教程,但实践问题要求您使用提供的信息来解决它们。这变得很有挑战性,因为你的代码显然更简洁、更有效,但想法是学习如何像计算机一样思考。不管怎样,这都会让人有点沮丧。谢谢你的帮助。@ GeraldAnekwe是有道理的,但我们很难给你建议,只使用你目前的信息,因为我们不知道什么信息你有这么多。如果你觉得这个答案是有用的,请考虑接受它,或接受@ dReMKD的答案,如果你觉得这个答案是有用的,请考虑接受它,或接受@达雷姆克的回答。