Ruby 如何翻译/映射哈希
我的任务是创建一个“密码”翻译器。它应该从用户那里获取输入,然后使用“转换器”散列映射/转换它。我目前拥有的代码如下所示Ruby 如何翻译/映射哈希,ruby,Ruby,我的任务是创建一个“密码”翻译器。它应该从用户那里获取输入,然后使用“转换器”散列映射/转换它。我目前拥有的代码如下所示 array = [] converter = { "A" => "Z", "B" => "Y", "C" => "X", "D" => "W", "E" => "V", "F" => "U", "G" => "T", "H" => "S", "I" => "R", "J" =>
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
我完全迷路了,你们能提供的任何帮助都会很好
谢谢 有更简单的方法来做你想做的事情。既然你在请求帮助之前已经试过了,我就给你解释一下 特别是,
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
这就是它。提示:它将查找表作为参数。在这段代码中,您实际上没有进行任何翻译。尝试更改
start\u hash[“input”][i]
while循环中的每次迭代。谢谢你的帮助,鲍勃-我很感激@如果这对你有效,也许你可以接受它作为答案。
new_phrase = phrase.chars.map { |c| converter[c] }.join