Ruby中如何按对应位置顺序合并两个等长哈希数组
Ruby按索引顺序合并两个等长哈希数组
给定两个长度始终相等、元素按位置一一对应的哈希数组,可通过以下方式实现合并:
基础实现(兼容height为nil的场景)
直接按索引配对后合并哈希即可,代码如下:
array1 = [{:new_listing => "1", :item => "apple"}, {:new_listing => "2", :item => "bannana"}] array2 = [{:height => "10"}, {:height => "12"}] merged_array = array1.zip(array2).map { |hash1, hash2| hash1.merge(hash2) }
执行后得到的结果与预期完全一致:
[ {:new_listing=>"1", :item=>"apple", :height=>"10"}, {:new_listing=>"2", :item=>"bannana", :height=>"12"} ]
逻辑说明
array1.zip(array2)会将两个数组同索引的元素两两配对,生成嵌套数组结构,每个子数组包含两个同位置的哈希- 遍历配对后的子数组,用
Hash#merge方法将两个哈希的键值对合并为单个哈希 - 若array2中存在
{:height => nil}的元素,合并后对应位置的哈希会正常保留:height => nil的键值对,不会出现索引错位、数据丢失问题
可选优化(过滤nil值的height字段)
如果不需要保留值为nil的height键,可以在合并前对第二个哈希做紧凑处理,自动移除值为nil的键值对:
merged_array = array1.zip(array2).map { |hash1, hash2| hash1.merge(hash2.compact) }
内容的提问来源于stack exchange,提问作者Grant Maleski
相关产品推荐
相关产品推荐

