Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何翻译/映射哈希_Ruby - Fatal编程技术网

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