2015-01-20 4 views
0

Для всех гласных в строке я пытаюсь напечатать количество гласных. Если я нажму каждый экземпляр гласного на новый массив, тогда длина массива + 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 

ответ

1

Проблема с arr.any? Это не делает то, что вы думаете.

В соответствии с документацией:

Проходит каждый элемент коллекции для данного блока. Метод возвращает истину, если блок всегда возвращает значение, отличное от ложных или ноль

Вместо этого, вы хотите использовать if arr.include? x

+0

Благодарю вас за ваше время и помощь. оцените ответ. –

+0

, если вы найдете этот ответ полезным, попробуйте принять его или принять ответ @daremkd – vincentleest

3

После того, как вы получите больше знакомы с 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» способом, используя конструкции, которые предоставляет вам язык.

+1

Говоря о методах более полезных для подсчета гласных в строке, это то, что мы имеем [String # count] (http://www.ruby-doc.org/core-2.2.0/String.html#method-i-count) для: 'this_string.count ('aeiou') # => 3' –

+0

Отредактировал свой ответ, чтобы добавить это, спасибо @Jordan – daremkd

+0

Собственно, это должно быть либо 'this_string.downcase.count ('aeiou')', либо 'this_string.count ('AaEeIiOoUu')'. Виноват. –