Ruby 如何连接哈希值和字符串

Ruby 如何连接哈希值和字符串,ruby,string,Ruby,String,我试图将哈希值作为串联字符串写入变量 original_string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" cipher_key = "honeyL" message_string = "hEllo world" deleted_string = original_string.delete!(cipher_key) altered_string = cipher_key + deleted_string encr

我试图将哈希值作为串联字符串写入变量

original_string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
cipher_key = "honeyL"
message_string = "hEllo world"

deleted_string = original_string.delete!(cipher_key)

altered_string = cipher_key + deleted_string

encryption_hash = Hash.new

i = 0
while(i < original_string.length) 
  encryption_hash [original_string[i]] = altered_string[i].to_s
  i += 1
end

encrypted_message = ""
count = 0

while(count < message_string.length)
  if(message_string[count] == " ")
    encrypted_message << message_string[count]
  else
    encrypted_message << encryption_hash[message_string[count]] 
  end
  count += 1
end

puts encrypted_message
original_string=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”
cipher_key=“honeyL”
message\u string=“你好,世界”
删除的字符串=原始字符串。删除!(加密密钥)
更改的\u字符串=密码\u密钥+删除的\u字符串
加密\u hash=hash.new
i=0
while(i<原始字符串长度)
加密\u散列[原始\u字符串[i]]=更改的\u字符串[i]。到
i+=1
结束
加密的_message=“”
计数=0
while(计数<消息字符串长度)
如果(消息字符串[计数]=“”)

加密的_消息因此这将帮助您走上正确的轨道。我不是100%确定你的项目的预期结果,但是这里有一个快速的原创与重写,并解释发生在你身上的事情

原件(注) 归根结底,我认为这是最好的解决办法。原因是它不需要对原始字符串进行预格式化,也不会丢失任何未映射的值。例如,在原始答案中,任何标点符号或数字都会被省略和丢失。使用此
gsub
方法,您只能加密要加密的字符集,其余字符集保持不变

这将解决方案简化为:

base_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
message = 'hEllo world'
key = 'honeyL'

altered_str = key + base_str.delete(key)

encryption_hash = Hash[base_str.chars.zip(altered_str.chars)]

message.gsub!(/[a-zA-Z]/, encryption_hash)

puts message

因此,这将有助于你走上正确的道路。我不是100%确定你的项目的预期结果,但是这里有一个快速的原创与重写,并解释发生在你身上的事情

原件(注) 归根结底,我认为这是最好的解决办法。原因是它不需要对原始字符串进行预格式化,也不会丢失任何未映射的值。例如,在原始答案中,任何标点符号或数字都会被省略和丢失。使用此
gsub
方法,您只能加密要加密的字符集,其余字符集保持不变

这将解决方案简化为:

base_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
message = 'hEllo world'
key = 'honeyL'

altered_str = key + base_str.delete(key)

encryption_hash = Hash[base_str.chars.zip(altered_str.chars)]

message.gsub!(/[a-zA-Z]/, encryption_hash)

puts message

您将在这一行中看到错误:

encrypted_message << encryption_hash[message_string[count]] 
在您的示例中,
count
是0(您正在进行第一次迭代),因此它正在寻找它的0索引。
原始\u字符串
的0索引是
a
,它存在于
加密\u散列
中。
message\u string
的0索引是
h
,它不存在于
加密\u散列中

我不确定解决方案可能是什么,因为我不确定预期的结果。但这就是它断裂的地方/原因。要调试它,您可以尝试使用ebug安装pry-pry-pry,然后在ruby文件的顶部添加:

require 'pry'
require 'pry-byebug
然后,在
else
语句后的新行上添加
binding.pry
。运行脚本,它将在该行“停止”。您可以使用
put
检查该点的所有变量

使用
exit
退出pry,并使用
wheremi
重置代码中停止位置的视图。您还可以使用
play-l
对一行进行求值


您在这一行上看到了错误:

encrypted_message << encryption_hash[message_string[count]] 
在您的示例中,
count
是0(您正在进行第一次迭代),因此它正在寻找它的0索引。
原始\u字符串
的0索引是
a
,它存在于
加密\u散列
中。
message\u string
的0索引是
h
,它不存在于
加密\u散列中

我不确定解决方案可能是什么,因为我不确定预期的结果。但这就是它断裂的地方/原因。要调试它,您可以尝试使用ebug安装pry-pry-pry,然后在ruby文件的顶部添加:

require 'pry'
require 'pry-byebug
然后,在
else
语句后的新行上添加
binding.pry
。运行脚本,它将在该行“停止”。您可以使用
put
检查该点的所有变量

使用
exit
退出pry,并使用
wheremi
重置代码中停止位置的视图。您还可以使用
play-l
对一行进行求值


不相关,但这不是非常像Ruby的代码。希望你的指导老师不会教你Ruby,就像教C或者旧的Java一样。无论如何,调试。逐步完成代码。打印出值。检查你的假设。进一步说明@DaveNewton所说的。在ruby中,使用带计数器的while循环绝对不是正确的做法。使用
original\u字符串。每个
查找ruby-each以了解其工作原理。你说不能连接是什么意思?这会给你一个错误吗?如果是,有什么错误?它是否给出了错误的值?写出您期望发生的事情和当前正在发生的事情,人们将能够更好地帮助您。您的哈希没有键
“h”
,因此哈希查找结果为
nil
,无法连接。“我在第24行遇到问题”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么,为什么,观察到的行为是什么,它们有什么不同?不相关,但这不是非常像Ruby的代码。希望你的指导老师不会教你Ruby,就像教C或者旧的Java一样。无论如何,调试。逐步完成代码。打印出值。检查你的假设。进一步说明@DaveNewton所说的。在ruby中,使用带计数器的while循环绝对不是正确的做法。使用
original\u字符串。每个
查找ruby-each以了解其工作原理。你说不能连接是什么意思?这会给你一个错误吗?如果是,有什么错误?它是否给出了错误的值?写出wha
pry >> original_string
=> "abcdfgijklmpqrstuvwxzABCDEFGHIJKMNOPQRSTUVWXYZ"
pry >> message_string
=> "hEllo world"
require 'pry'
require 'pry-byebug