2016-08-27 6 views
0

Итак, допустим, у меня есть хэш, полный строк, как значения. Как я могу сделать метод, который будет искать хэш и возвращать строку с большинством гласных в ней?Поиск хэша для строки с большинством гласных

+0

Использование @ ответ MichałMłoźniak и предложение на @ MladenJablanović вы можете использовать: 'hash.max_by {| ключ, значение | value.scan (/ [aeiou] /). size} ' –

ответ

1
result = nil 
max = 0 

# hash is your hash with strings 
hash.values.each do |value| 
    vowels = value.scan(/[aeiouy]/).size 

    if vowels > max 
    max = vowels 
    result = value 
    end 
end 

puts result 
+0

Посмотрите на метод Enumerable # max_by. –

+0

Что делать, если есть галстук? –

+0

@ sagarpandya82 Первое появление будет возвращено –

2

Я предлагаю вам использовать Enumerable#max_by и String#count.

def most_vowel_laden(h) 
    h.values.max_by { |str| str.count('aeiouAEIOU') } 
end 

keys = [1, 2, 3, 4, 5, 6] 
h = keys.zip(%w| It was the best of times |).to_h 
    #=> {1=>"it", 2=>"was", 3=>"the", 4=>"best", 5=>"of", 6=>"times"} 
most_vowel_laden h 
    #=> "times" 

h = keys.zip(%w| by my dry fly why supercalifragilisticexpialidocious |).to_h 
    #=> {1=>"by", 2=>"my", 3=>"dry", 4=>"fly", 5=>"why", 
    # 6=>"supercalifragilisticexpialidocious"} 
most_vowel_laden h 
    #=> "supercalifragilisticexpialidocious" 

В качестве альтернативы,

def most_vowel_laden(h) 
    h.max_by { |_,str| str.count('aeiouAEIOU') }.last 
end 
+0

ОП запрашивает метод, который ищет хеш-то? –

+0

@ sagarpandya82, кричит! Исправлена. Благодарю. –

Смежные вопросы