如何将一维数组转换为嵌套数组并使用arr.to_h方法生成哈希?
解决Ruby数组转嵌套数组再转哈希的问题
嘿,这个需求用Ruby内置的方法就能轻松实现,我给你捋清楚步骤:
1. 将原数组转换为嵌套数组
Ruby的each_slice方法专门用来按指定长度拆分数组,刚好匹配你的需求。给它传入2,让它每2个元素分成一组,再通过to_a把枚举器转成数组即可:
arr = ["a", "b", "c", "d", "e", "f"] nested_arr = arr.each_slice(2).to_a # 此时 nested_arr 的值就是 [["a", "b"], ["c", "d"], ["e", "f"]]
2. 将嵌套数组转换为哈希
Ruby的Array#to_h方法可以直接把这种每个子数组都包含两个元素的嵌套数组转成哈希——子数组的第一个元素会作为哈希的键,第二个作为对应的值。直接对上面得到的嵌套数组调用这个方法就行:
result_hash = nested_arr.to_h # 结果是 {"a"=>"b", "c"=>"d", "e"=>"f"}
更简洁的写法
你也可以把两步合并成一行代码,省去中间变量:
arr = ["a", "b", "c", "d", "e", "f"] result_hash = arr.each_slice(2).to_h # 同样得到 {"a"=>"b", "c"=>"d", "e"=>"f"}
简单解释下原理:each_slice(2)会遍历原数组,每次取出2个元素组成子数组,返回一个枚举器;to_h方法可以直接接收这个枚举器(因为枚举器的每个元素都是二元数组),直接转换为哈希,甚至不需要先转成数组~
内容的提问来源于stack exchange,提问作者The_Last_Ruh
相关产品推荐
相关产品推荐

