Ruby技术求助:如何用输入对象匹配数组元素?当前代码无法运行
解决Ruby哈希数组匹配的问题
嘿,我帮你梳理下代码里的几个关键问题,分分钟就能搞定:
问题1:哈希键的访问出错了
你定义的宠物列表是字符串键的哈希数组(比如{"id" => "cat"}),但代码里写的list[name]会直接报错——这里的name是个未定义的局部变量,Ruby根本不知道你要访问哈希里的哪个键。
你得把它改成对应字符串键的访问方式:list["name"]。要是之后想用更简洁的符号键,也可以把哈希改成{id: "cat", name: "Kitty"}的形式,这样访问时用list[:name]就行。
问题2:输出ID时的逻辑错误
你写的#{'id'}只是在输出字符串"id",而不是对应宠物的真实ID值。得改成访问哈希里的id键,也就是list["id"](对应字符串键的哈希)或者list[:id](对应符号键的哈希)。
修正后的完整代码
调整后的可运行版本给你放在下面了:
# 定义宠物列表(注意这是Ruby哈希数组,若从JSON解析需额外处理) my_list = [{"id" => "cat", "name" => "Kitty"}, {"id" => "dog", "name" => "Pop"}] # 获取命令行输入的宠物名称 @pet = ARGV[0] # 遍历列表匹配目标宠物 my_list.each do |item| if item["name"] == @pet puts "The ID of pet: #{item["id"]}" end end
额外小提示
- 如果运行时没传命令行参数(
ARGV[0]为nil),程序不会有输出,你可以加个判断处理这种情况:if @pet.nil? puts "请输入要查询的宠物名称!" exit end - 要是你的列表是从JSON文件来的,记得先引入
json库解析:require 'json' my_list = JSON.parse(File.read("你的宠物文件.json"))
内容的提问来源于stack exchange,提问作者X Cage
相关产品推荐
相关产品推荐

