我正在构建一个简单的加密器来加密ruby中的字符串。
cipher = {"a" => "6", "b" => "$", "c" => "X"...}
key_word = "secret"
key_word.split(//)
=> ["s", "e", "c", "r", "e", "t"]
如何将key_word字符与我的密码哈希中的密钥进行比较并返回它们?
答案 0 :(得分:2)
您可以使用Rexexp.union
和String#gsub
的哈希参数版本
encrypted = key_word.gsub(Regexp.union(cipher.keys), cipher)
答案 1 :(得分:2)
String#gsub的一种形式将哈希作为参数:
encrypted = key_word.gsub(/./, cipher)
所以只需匹配每个字符并将其替换为cipher
中的值。如果cipher
没有等于该字符的键,则该字符保持不变。
答案 2 :(得分:1)
你可以这样做:
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"
答案 3 :(得分:0)
这很简单:
ciper.values_at(*key_word.split(//)).join