2017-04-13 21 views
1

ユーザー入力とハッシュ値の値を比較しようとしています。ユーザー入力をハッシュ値と比較する方法

たとえば、IRBで"e".scrabble()を実行した場合、ハッシュの "e"の値が返されます。

ハッシュ内にあるかどうか、ハッシュ内のキーのいずれかと等しいかどうかを調べる方法を知りました。

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

私は単純に二つのスペースをインデントのRubyの規則に適合するように、わずかにあなたのコードを再フォーマット。単純に 'def scrabble ...'ではなく 'define_method'を使うことを選択し、' String#== 'メソッドを正式な方法('。 ==(...) ')を使うのではなく、"構文糖 "keys()== self.capitalize'を使用します(余分な括弧は必要ありません、btw)。 Rubyの学習の初期段階で教えられているのはそれが非常に良いことだと思います!あなたはすぐに従来の方法を学ぶでしょう。 –

+0

ヒント@CarySwoveland –

答えて

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

に感謝しています。「自己」は冗長であり、ウムラウトはよく認識できないので、しばらくの間「wtf?」になりました。ここにいくつかのより明らかなキリル文字があります: "" ": – mudasobwa

+0

@ mudasobwa' "" .scrabble' –

+0

ジョーダンは本当に良いです。 – mudasobwa

関連する問題