You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:04:27