2016-10-28 3 views
0

Ich habe einen Hash der Daten, die verschiedene Zeichenfolgen als Schlüssel enthält. Ich muss eine neue Methode in meiner Klasse erstellen, die die Anzahl der Vokale in jedem Schlüssel zählt und dann den Schlüssel mit den meisten Vokalen zurückgibt. Ich stecke sehr fest und das habe ich bisher.Schreiben einer Methode zum Überprüfen der Anzahl der Vokale in einer Zeichenfolge

def favorite_wish 
    vowels = ["a", "e", "i", "o", "u"] 
    @submitted_wishes.each_key do |wish| 
    wish.split(' ') 
    wish.each do |check| 
     if check == vowels 
    end 
    end 
end 

Kann jemand helfen?

Antwort

1

String#count könnte Ihnen helfen:

# this will return the key with the max number of vowels 
def favorite_wish 
    @submitted_wishes.keys.max_by { |wish| wish.count('aeiou') } 
end 

# this will return the value to the key with the max number of vowels 
def favorite_wish 
    max_key = @submitted_wishes.keys.max_by { |wish| wish.count('aeiou') } 
    @submitted_wishes[max_key] 
end 
+0

Ich glaube, Der Schlüssel ist zurückzugeben. –

0

Dies wird der Schlüssel mit den meisten Vokale erhalten:

@submitted_wishes.keys.max_by { |key| key.count('aeiou') } 
0

würde ich die folgenden Methoden verwenden:

def count_vowels(str) 
    str.count 'aeiou' 
end 

def highest_value_key(hash) 
    hash.key(hash.values.max) 
end 

Die Idee hinter Diese Methoden dienen dazu, Probleme zu trennen und lesbarer zu machen.

0
h = { "Mary"=>"Mary", "quite"=>"contrary", "how"=>"does your", "garden"=>"grow?" } 

h.map { |k,_| [k.count('aeiou'), k] }.max.last 
    #=> => "quite" 

Die Schritte:

a = h.map { |k,_| [k.count('aeiou'), k] } 
    #=> [[1, "Mary"], [3, "quite"], [1, "how"], [2, "garden"]] 
b = a.max 
    #=> [3, "quite"] 
b.last 
    #=> "quite" 

Siehe Array#<=> für eine Erläuterung, wie Arrays geordnet sind (wenn max Computing).

Wenn Tasten k1 und k2 Bindung für die maximale Anzahl der Vokale, k1 <=> k2 die Bindung bricht (k1 zurückgegeben, wenn k1 <=> k2 #=> -1 wird k2 zurückgegeben, wenn k1 <=> k2 #=> 1, entweder Schlüssel könnte, wenn k1 <=> k2 #=> 0 zurückgegeben werden. Siehe String#<=>.

Verwandte Themen