2017-04-13 1 views
1

J'essaie de comparer l'entrée de l'utilisateur aux valeurs dans mon hachage. Par exemple, si je cours "e".scrabble() dans IRB, il retournera la valeur de "e" dans mon hachage.Comment comparer l'entrée de l'utilisateur avec les valeurs dans un hachage

J'ai trouvé comment identifier si elle est dans mon hachage et si elle est égale à l'une des clés dans le hachage.

class String 
    define_method(:scrabble) do 
    value_for_letters = { 
     "A"=> 9,"B" => 2,"C" => 2,"D" => 4,"E" => 12,"F" => 2, 
     "G" => 3, "H" => 2, "I" => 9,"J" => 1, "K" => 1,  
     "L" => 4,"M" => 2,"N" => 6,"O" => 8,"P" => 2,"Q" => 1, 
     "R" => 6,"S" => 4,"T" => 6,"U" => 4,"V" => 2,"W" => 2, 
     "X" => 1,"Y" => 2,"Z" => 1 
    } 

    value_for_letters.keys().==(self.capitalize()) 
    "true" 
    end 
end 
+1

Je simplement reformater votre code légèrement pour se conformer à la convention Ruby de deux espaces indenter. Il y a deux choses que je trouve un peu bizarre avec votre code: que vous avez choisi d'utiliser 'define_method' plutôt que simplement' def scrabble ... 'et que vous avez invoqué la méthode' String # == 'de façon formelle ('. == (...) '), plutôt que d'utiliser le" sucre syntaxique "' keys() == self.capitalize' (les parens supplémentaires ne sont pas nécessaires, btw). Je pense que c'est ce qu'on vous enseigne dans vos premiers jours d'apprentissage de Ruby, ce qui est une très bonne chose! Vous apprendrez les méthodes conventionnelles assez tôt. –

+0

merci pour les conseils @CarySwoveland –

Répondre

2
class String 
    LETTER_VALUE_MATCHING = { 
    'A' => 9, 'B' => 2, 'C' => 2, 'D' => 4, 'E' => 12, 
    'F' => 2, 'G' => 3, 'H' => 2, 'I' => 9, 'J' => 1, 
    'K' => 1, 'L' => 4, 'M' => 2, 'N' => 6, 'O' => 8, 
    'P' => 2, 'Q' => 1, 'R' => 6, 'S' => 4, 'T' => 6, 
    'U' => 4, 'V' => 2, 'W' => 2, 'X' => 1, 'Y' => 2, 
    'Z' => 1 
    } 

    def scrabble 
    LETTER_VALUE_MATCHING[self.capitalize] 
    end 
end 

'a'.scrabble 
# => 9 
'-'.scrabble 
# => nil 
+0

'self' est redondant et un tréma n'est pas bien reconnaissable, ce qui m'a fait" wtf? "Pour un moment. Voici un cyrillique plus évident: "Щ" :) – mudasobwa

+0

@mudasobwa '" ".scrabble' –

+0

@Jordan encore mieux, en effet. – mudasobwa