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