2017-04-13 75 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

我只是重新格式化你的代碼稍微縮進兩個空格的紅寶石慣例接軌。有兩件事我發現你的代碼有點奇怪:你選擇使用'define_method'而不是簡單的'def scrabble ...',並且你以正式的方式調用了'String#=='方法。 ==(...)'),而不是使用「語法糖」鍵()== self.capitalize'(額外的parens不是必需的,順便說一句)。我懷疑這就是你在學習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

'自我'是多餘的,變音符號不能很好識別,這使我「跆拳道?」一段時間。這裏有一些更明顯的西里爾:「Щ」:) :) – mudasobwa

+0

@mudasobwa'「」.scrabble' –

+0

@Jordan甚至更好,確實如此。 – mudasobwa

相關問題