我正在構建一個簡單的加密器來加密紅寶石中的字符串。如何將數組與紅寶石中的鍵進行比較?
cipher = {"a" => "6", "b" => "$", "c" => "X"...}
key_word = "secret"
key_word.split(//)
=> ["s", "e", "c", "r", "e", "t"]
如何將key_word字符與我的密碼哈希中的密鑰進行比較並返回它們?
我正在構建一個簡單的加密器來加密紅寶石中的字符串。如何將數組與紅寶石中的鍵進行比較?
cipher = {"a" => "6", "b" => "$", "c" => "X"...}
key_word = "secret"
key_word.split(//)
=> ["s", "e", "c", "r", "e", "t"]
如何將key_word字符與我的密碼哈希中的密鑰進行比較並返回它們?
你可以做這樣的事情:
cipher = {"a" => "6", "b" => "$", "c" => "X"}
'abc'.tr(cipher.keys.join, cipher.values.join)
#=> "6$X"
或分割和結合(什麼可能是慢得多):
'abc'.each_char.map { |char| cipher[char] }.join
#=> "6$X"
像這樣簡單:
ciper.values_at(*key_word.split(//)).join
你可以用Rexexp.union
和散列參數版本String#gsub
:
encrypted = key_word.gsub(Regexp.union(cipher.keys), cipher)
μ,我同意你將字符串轉換爲數組沒有意義。沒有拉姆達? – 2015-04-06 04:48:12
@CarySwoveland在這裏不需要lambda表達式,我使用一個哈希表(它實際上只是一個函數,其域是它的鍵集......)來表示這次的函數:) – 2015-04-06 05:15:23
一種形式從一個哈希作爲參數:
encrypted = key_word.gsub(/./, cipher)
因此,只要符合每個字符,並憑藉其在cipher
值替換它。如果cipher
沒有等於該字符的鍵,則該字符保持不變。
結果是「X」 。如果密碼沒有與該字符相同的密鑰,則該字符被替換爲空白。 – bluexuemei 2015-04-16 02:07:56
我不遵循'「X:'的意思,我假定'密碼'對每個字符都有一個密鑰,它在我看來,它是任何值得使用它的鹽的要求,解碼的信息,「我已經設置了定時器在_o'時刻停止使用」,並不是很有用。 – 2015-04-16 02:24:27
請修改您的問題以更正代碼:'key_word.split(//)#=> [「s」,「e」,「c」,「r」,「e」,「t」]'。是的,我們知道你的意思,但你需要做的正確。你可以通過擴展'cipher'來包含所有字母在「祕密」中的密鑰(以及其他幾個字母和點數)來改進你的問題,這樣讀者就可以更容易地測試他們的代碼了。 – 2015-04-06 04:54:22