如何在Ruby的Hash键中添加动态变量(循环索引)
如何将循环索引与固定文本组合成Ruby Hash的键?
你的核心需求是构造带索引后缀的符号键,原代码的问题在于直接在符号字面量里插入变量的写法是错误的,Ruby无法识别[:loop_[index]]这种语法。下面提供几种简洁的实现方式:
方法1:手动维护起始索引
如果你需要从指定的起始值(比如5)开始计数,可以手动维护索引变量,通过字符串拼接后转符号的方式构造键:
unit_type = {} index = 5 list.each do |x| # 先拼接字符串再转成符号 unit_type["loop_#{index}".to_sym] = x index += 1 end
方法2:使用each_with_index(更Ruby化)
利用Ruby内置的each_with_index方法,结合偏移量实现起始索引从5开始,无需手动维护变量:
unit_type = {} list.each_with_index do |x, idx| # 索引从0开始,加上偏移量5得到目标值 unit_type[:"loop_#{idx + 5}"] = x end
语法补充:Ruby 2.0+的符号插值
Ruby 2.0及以上版本支持直接在符号里做插值,写法更简洁:
# 对应方法1的简化写法 unit_type = {} index = 5 list.each do |x| unit_type[:"loop_#{index}"] = x index += 1 end
执行上述代码后,若list = ["test result", "second item"],生成的Hash会符合你的预期:
unit_type = {:loop_5=>"test result", :loop_6=>"second item"}
内容的提问来源于stack exchange,提问作者itsmemrit
相关产品推荐
相关产品推荐

