如何翻译/映射哈希



我的任务是创建一个"密码"转换器。它应该从用户那里获取输入,然后使用"转换器"哈希映射/翻译它。我目前拥有的代码如下所示。

array = []
converter = {
"A" => "Z",
"B" => "Y",
"C" => "X",
"D" => "W",
"E" => "V",
"F" => "U",
"G" => "T",
"H" => "S",
"I" => "R",
"J" => "Q",
"K" => "P",
"L" => "O",
"M" => "N",
"N" => "M",
"O" => "L",
"P" => "K",
"Q" => "J",
"R" => "I",
"S" => "H",
"T" => "G",
"U" => "F",
"V" => "E",
"W" => "D",
"X" => "C",
"Y" => "B",
"Z" => "A"
}
puts "Enter a phrase to translate"
start = gets.chomp
array = start.split("")
start_hash = {"input" => array}
print start_hash["input"]
index = 0
while index < start_hash["input"].length
print start_hash["input"]
index += 1
end  

我不能100%确定我走在正确的道路上。因此,如果我输入代码,输出将是这样的:

code = xlwv

我超级迷茫,你们能够提供的任何帮助都会很棒。

谢谢!

有更简单的方法可以完成您正在寻找的事情。既然你在寻求帮助之前已经试过了,我就为你分解一下。

特别是,map是运行数组并将其值转换为其他值的最简单方法。在我解释如何做到这一点之前,您还有其他几个问题需要解决。

首先,如果要在哈希中查找大写字母,则需要输入为大写字母。所以:

puts "Enter a phrase to translate:"
phrase = gets.chomp.upcase

现在,chars比使用split('')更简单,并且做同样的事情:

arr = phrase.chars

接下来,您可以使用map来更改阵列:

new_arr = arr.map do |c|
converter[c]
end

这将逐个遍历数组,依次c每个数组元素值(换句话说,每个字符(设置为相等。然后,do循环内的任何结果都会入到数组中。当map到达正在映射的数组中的最后一个元素时,它会返回它一直在插入值的新数组。

因此,c成为您的哈希键,converter[c]是该键的哈希值。该哈希值是插入到新数组中的值。调用map的结果将是数组形式的加密字符串。

最后,将map调用的结果联接到一个字符串中:

new_phrase = new_arr.join

现在,你不需要所有这些代码行和额外的变量来获得这个结果——我这样做是为了帮助你一步一步地看问题。使用gets获取phrase变量后,可以轻松地将其余代码拉到一行中:

new_phrase = phrase.chars.map { |c| converter[c] }.join

你有它。

最新更新