[英]How to compare array with keys in a hash in ruby?
我正在构建一个简单的加密器,以用ruby加密字符串。
cipher = {"a" => "6", "b" => "$", "c" => "X"...}
key_word = "secret"
key_word.split(//)
=> ["s", "e", "c", "r", "e", "t"]
如何比较key_word字符和密码哈希中的密钥并返回它们?
您可以使用Rexexp.union
和String#gsub
的哈希参数版本来实现:
encrypted = key_word.gsub(Regexp.union(cipher.keys), cipher)
String#gsub的一种形式以哈希作为参数:
encrypted = key_word.gsub(/./, cipher)
因此,只需匹配每个字符并将其替换为cipher
值即可。 如果cipher
没有与该字符相等的密钥,则该字符保持不变。
您可以执行以下操作:
cipher = {"a" => "6", "b" => "$", "c" => "X"}
'abc'.tr(cipher.keys.join, cipher.values.join)
#=> "6$X"
或使用split and join(可能会慢很多):
'abc'.each_char.map { |char| cipher[char] }.join
#=> "6$X"
就这么简单:
ciper.values_at(*key_word.split(//)).join
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.