我正在构建一个简单的加密器来加密红宝石中的字符串。如何将数组与红宝石中的键进行比较?
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