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

问题描述 投票:0回答:4

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

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

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

ruby arrays hash
4个回答
2
投票

一种形式的String#gsub将哈希作为参数:

encrypted = key_word.gsub(/./, cipher)

所以只需匹配每个字符并将其替换为cipher中的值。如果cipher没有等于该字符的键,则该字符保持不变。


2
投票

您可以使用Rexexp.unionString#gsub的哈希参数版本来完成:

encrypted = key_word.gsub(Regexp.union(cipher.keys), cipher)

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"

0
投票

就这么简单:

ciper.values_at(*key_word.split(//)).join
© www.soinside.com 2019 - 2024. All rights reserved.