如何在Ruby中利用索引将数组转换为键从1开始的哈希表?
Ruby实现数组转1起始索引的哈希
先指出你代码里的问题:
- 变量名不匹配:定义的数组是
color,但循环里误用了未定义的var each_with_object的块参数写法错误,该方法需要同时接收数组元素和目标哈希对象,且你没有在块内完成键值对的赋值操作
下面是几种可行的实现方式:
方法1:结合each_with_object与索引计算
colors = ["Cyan", "Magenta", "Yellow", "Black"] color_hash = colors.each_with_object({}) do |color, hash| hash[colors.index(color) + 1] = color end # 输出结果: {1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}
方法2:用each_with_index直接构建哈希
colors = ["Cyan", "Magenta", "Yellow", "Black"] color_hash = {} colors.each_with_index do |color, idx| color_hash[idx + 1] = color end
方法3:一行式实现(map+to_h)
colors = ["Cyan", "Magenta", "Yellow", "Black"] color_hash = colors.each_with_index.map { |color, idx| [idx + 1, color] }.to_h
核心逻辑是:利用each_with_index获取数组元素和从0开始的索引,将索引值加1作为哈希的键,数组元素作为对应的值,最终生成目标哈希结构。
内容的提问来源于stack exchange,提问作者Admiral Zukov
相关产品推荐
相关产品推荐

