Ruby分两步Zip三个数组及合并list_1与warehouses_stocks数组
没问题,我来帮你拆解这两个Ruby数组操作的问题~
一、分两步Zip三个数组的操作
先拿具体场景举例,假设我们有三个存储不同维度数据的数组,需要分两步完成合并:
# 三个原始数组 arr1 = [101, 102, 103] # 商品ID arr2 = ["T-Shirt", "Jeans", "Jacket"] # 商品名称 arr3 = [29.99, 59.99, 89.99] # 商品价格 # 第一步:合并前两个数组,得到你提到的中间结果list_1 list_1 = arr1.zip(arr2) # => [[101, "T-Shirt"], [102, "Jeans"], [103, "Jacket"]] # 第二步:将list_1与第三个数组合并,完成三个数组的分步Zip final_combined = list_1.zip(arr3).map { |group| group.flatten } # => [[101, "T-Shirt", 29.99], [102, "Jeans", 59.99], [103, "Jacket", 89.99]]
这里的flatten是把嵌套数组展开成一维结构,如果你的需求是保留嵌套层级,可以去掉这个方法,直接得到[[[101, "T-Shirt"], 29.99], ...]的结构。
二、合并list_1与warehouses_stocks为指定格式
假设你的list_1是第一步得到的二维数组,warehouses_stocks是计算后得到的对应仓库库存数组(比如每个元素对应商品在两个仓库的库存),我们以合并成结构化哈希数组为例(这是最常用的指定格式):
# 第一步得到的list_1 list_1 = [[101, "T-Shirt"], [102, "Jeans"], [103, "Jacket"]] # 计算得到的warehouses_stocks:每个元素对应商品在仓库A、B的库存 warehouses_stocks = [[50, 30], [20, 40], [15, 25]] # 合并为指定格式的哈希数组 merged_result = list_1.zip(warehouses_stocks).map do |(product_info, stock_info)| { product_id: product_info[0], product_name: product_info[1], warehouse_a_stock: stock_info[0], warehouse_b_stock: stock_info[1] } end # 输出结果: # [ # {:product_id=>101, :product_name=>"T-Shirt", :warehouse_a_stock=>50, :warehouse_b_stock=>30}, # {:product_id=>102, :product_name=>"Jeans", :warehouse_a_stock=>20, :warehouse_b_stock=>40}, # {:product_id=>103, :product_name=>"Jacket", :warehouse_a_stock=>15, :warehouse_b_stock=>25} # ]
如果你的list_1本身就是哈希数组,合并会更简洁:
# 假设list_1是哈希数组 list_1 = [ { product_id: 101, product_name: "T-Shirt" }, { product_id: 102, product_name: "Jeans" }, { product_id: 103, product_name: "Jacket" } ] merged_result = list_1.zip(warehouses_stocks).map do |product, stocks| product.merge( warehouse_a_stock: stocks[0], warehouse_b_stock: stocks[1] ) end
关键注意点:
- 确保
list_1和warehouses_stocks的长度一致,否则zip会用nil填充较短数组的缺失元素,你可以用compact或条件判断处理这种情况。 - 如果你的“指定格式”不是哈希数组,只需要修改
map块内的逻辑即可,核心都是用zip来配对两个数组对应位置的元素。
内容的提问来源于stack exchange,提问作者user3754535
相关产品推荐
相关产品推荐

