如何用Ruby按条件读取YAML文件指定员工哈希及遍历未知员工
问题分析与解决
原代码的核心问题
- 遍历员工哈希时,错误地将
yaml_employee[key](对应员工的信息哈希)与字符串"jack"做比较,实际应该判断遍历的key是否为"jack" - 代码缺少闭合的
end语句,存在语法错误 - 输出格式不符合预期,未按要求拼接成指定格式的字符串
需求一:获取指定员工jack的信息
方法一:直接通过键取值(更高效)
require 'yaml' # 加载YAML文件 yaml_data = YAML.load_file('/etc/puppetlabs/facter/facts.d/details.yaml') employees = yaml_data['offices']['employees'] # 检查jack是否存在并输出指定信息 if employees.key?('jack') jack_info = employees['jack'] puts "jack, #{jack_info['role']}, #{jack_info['primary_contact']}" end
方法二:修正遍历逻辑
require 'yaml' yaml_data = YAML.load_file('/etc/puppetlabs/facter/facts.d/details.yaml') employees = yaml_data['offices']['employees'] employees.each do |name, info| if name == 'jack' puts "#{name}, #{info['role']}, #{info['primary_contact']}" end end
需求二:遍历输出所有员工信息
直接遍历员工哈希的键值对,逐个输出即可:
require 'yaml' yaml_data = YAML.load_file('/etc/puppetlabs/facter/facts.d/details.yaml') employees = yaml_data['offices']['employees'] employees.each do |name, info| puts "#{name}, #{info['role']}, #{info['primary_contact']}" end
执行后输出:
jack, developer, xyz@gmail.com tom, tester, abc@gmail.com
内容的提问来源于stack exchange,提问作者user9395071
相关产品推荐
相关产品推荐

