ruby - Ruby:使用适当的组合从两个二维数组编译散列
问题描述
我有两个二维数组:
product_names_array = [product_one_names = ["Product One A", "Product One B"],
product_two_names = ["Product Two C", "Product Two D"]]
product_prices_array = [product_one_price = [product_one_price_1, product_one_price_2, product_one_price_3, product_one_price_4],
product_two_price = [product_two_price_1, product_two_price_2, product_two_price_3, product_two_price_4]]
在第一个二维数组中,我有 2 个子数组(实际上有 16 个) - 每个产品一个。它们中的每一个都为同一产品列出了不同的名称(每个产品可以有 1 到 22 个替代名称)。
在第二个二维数组中,我有 2 个子数组(实际上也有 16 个)——每个产品的每个价格表一个。它们中的每一个都从前一个二维数组中的对应子数组中列出了同一产品(可能有多个名称)的不同价格(实际上是 10 个价格选项)。
我想从数组中进行这样的哈希:
my_hash = {"Product One A" => [product_one_price_1, product_one_price_2, product_one_price_3, product_one_price_4],
"Product One B" => [product_one_price_1, product_one_price_2, product_one_price_3, product_one_price_4],
"Product One C" => [product_two_price_1, product_two_price_2, product_two_price_3, product_two_price_4],
"Product Two D" => [product_two_price_1, product_two_price_2, product_two_price_3, product_two_price_4]}
如您所见,第一个二维数组中的数组中的每个值都与第二个二维数组中的每个对应数组创建了所有可能的组合。
然后我想像这样使用创建的哈希:
puts my_hash["Product One B"[2]] # => product_one_price_3
(我怀疑这个表达的正确性,所以如果你也能在这里帮助我,我将不胜感激......)
我还想避免定义新方法,因为此代码将用于 Redmine 的插件 Computed Custom Field 中,并且它不接受 def。
我已经重新阅读了一堆关于 Ruby 中的数组和哈希的信息,好吧,到目前为止,我什至还没有接近解决我的问题。任何帮助都会有所帮助!
解决方案
您可以从zip
方法中受益,该方法将组合两个数组中的相应元素
([0] - [0]
,[1] - [1]
依此类推)
result = product_names_array.zip(product_prices_array)
.flat_map { |names, prices| names.map { |name| [name, prices] }}
.to_h
result
# output
# product_one_prices: 11, 12, 13, 14
# product_two_prices: 21, 22, 23, 24
{
"Product One A"=>[11, 12, 13, 14],
"Product One B"=>[11, 12, 13, 14],
"Product Two C"=>[21, 22, 23, 24],
"Product Two D"=>[21, 22, 23, 24]
}
推荐阅读
- json - 如何在 SpringBoot 的模型类中创建 JSONObject?(带值类型)
- batch-file - 如何使用批处理文件从 Unreal Engine .uproject 文件生成 Visual Studio 项目文件?
- angular - 如何通过模板渲染多个 Component 类型的变量
- javascript - 如何使用 discord.js 编辑消息?
- javascript - 小吃吧,每次在 React 中显示的新计时器
- typescript - 如何从打字稿通用条件中“抛出”?
- reactjs - 如果道具是通过用户输入获得的,如何通过抽屉导航传递道具?
- ios - UICollectionView 布局错误的项目大小
- r - 按 id 和最近日期的条件 left_join
- python - python repli数据库抛出typeError