如何将数组与ruby中的哈希中的键进行比较?

时间:2015-04-06 02:14:08

标签: ruby arrays hash

我正在构建一个简单的加密器来加密ruby中的字符串。

cipher = {"a" => "6", "b" => "$", "c" => "X"...}
key_word = "secret"
key_word.split(//)
=> ["s", "e", "c", "r", "e", "t"]

如何将key_word字符与我的密码哈希中的密钥进行比较并返回它们?

4 个答案:

答案 0 :(得分:2)

您可以使用Rexexp.unionString#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