【问题标题】:Create a new array from existing hash based on a keys value根据键值从现有哈希创建一个新数组
【发布时间】:2021-01-08 02:21:11
【问题描述】:
[{"date"=>"2020-09-15", "work_category"=>"CASE PICKS", "count"=>"21315"},
 {"date"=>"2020-09-15", "work_category"=>"LOADING", "count"=>"6401"},
 {"date"=>"2020-09-15", "work_category"=>"PALLET STAGING", "count"=>"6649"},
 {"date"=>"2020-09-15", "work_category"=>"PUTAWAY", "count"=>"4974"},
 {"date"=>"2020-09-15", "work_category"=>"RECEIVING", "count"=>"4108"},
 {"date"=>"2020-09-16", "work_category"=>"CASE PICKS", "count"=>"16842"},
 {"date"=>"2020-09-16", "work_category"=>"LOADING", "count"=>"4987"},
 {"date"=>"2020-09-16", "work_category"=>"PALLET STAGING", "count"=>"5716"},
 {"date"=>"2020-09-16", "work_category"=>"PUTAWAY", "count"=>"6292"},
 {"date"=>"2020-09-16", "work_category"=>"RECEIVING", "count"=>"4894"},
 {"date"=>"2020-09-17", "work_category"=>"CASE PICKS", "count"=>"24849"},
 {"date"=>"2020-09-17", "work_category"=>"LOADING", "count"=>"5303"},
 {"date"=>"2020-09-17", "work_category"=>"PALLET STAGING", "count"=>"5753"},
 {"date"=>"2020-09-17", "work_category"=>"PUTAWAY", "count"=>"5136"},
 {"date"=>"2020-09-17", "work_category"=>"RECEIVING", "count"=>"4699"},
 {"date"=>"2020-09-18", "work_category"=>"CASE PICKS", "count"=>"11806"},
 {"date"=>"2020-09-18", "work_category"=>"LOADING", "count"=>"5147"},
 {"date"=>"2020-09-18", "work_category"=>"PALLET STAGING", "count"=>"5426"},
 {"date"=>"2020-09-18", "work_category"=>"PUTAWAY", "count"=>"5110"},
 {"date"=>"2020-09-18", "work_category"=>"RECEIVING", "count"=>"4534"},
 {"date"=>"2020-09-19", "work_category"=>"CASE PICKS", "count"=>"8086"},
 {"date"=>"2020-09-19", "work_category"=>"LOADING", "count"=>"1753"},
 {"date"=>"2020-09-19", "work_category"=>"PALLET STAGING", "count"=>"2201"},
 {"date"=>"2020-09-19", "work_category"=>"PUTAWAY", "count"=>"1341"},
 {"date"=>"2020-09-19", "work_category"=>"RECEIVING", "count"=>"1052"},
 {"date"=>"2020-09-20", "work_category"=>"CASE PICKS", "count"=>"5160"},
 {"date"=>"2020-09-20", "work_category"=>"LOADING", "count"=>"2690"},
 {"date"=>"2020-09-20", "work_category"=>"PALLET STAGING", "count"=>"2663"},
 {"date"=>"2020-09-20", "work_category"=>"PUTAWAY", "count"=>"1554"},
 {"date"=>"2020-09-20", "work_category"=>"RECEIVING", "count"=>"1536"},
 {"date"=>"2020-09-21", "work_category"=>"CASE PICKS", "count"=>"2202"},
 {"date"=>"2020-09-21", "work_category"=>"LOADING", "count"=>"860"},
 {"date"=>"2020-09-21", "work_category"=>"PALLET STAGING", "count"=>"1004"},
 {"date"=>"2020-09-21", "work_category"=>"PUTAWAY", "count"=>"1238"},
 {"date"=>"2020-09-21", "work_category"=>"RECEIVING", "count"=>"954"}]

我需要从上面的哈希中取出这个数据集/哈希/数组:

逻辑: 获取一个数组,该数组列出每个 work_category 行的计数键值,这些值与列出的每个日期的“CASE PICKS”的提供的 work_category 键值相匹配(保持日期顺序最旧 -> 最新)。

所需的结果集:

[ “21315”, “16842”, “24849”, “11806”, “8086”, “5160”, “2202” ]

看起来很基本,但我遇到了一些麻烦......对 Ruby 来说非常绿色。任何可以提供帮助的人 - 将不胜感激!

【问题讨论】:

  • 你确定你的结果应该是一个哈希而不是一个数组吗?您的“所需结果集”实际上不是有效的 Ruby - 哈希有键和值,记住。
  • 对不起——一个新的数组。你是对的。

标签: ruby dictionary hash


【解决方案1】:

以下是问题中给出的数组的子数组。

arr = [
  {"date"=>"2020-09-15", "work_category"=>"CASE PICKS", "count"=>"21315"},
  {"date"=>"2020-09-15", "work_category"=>"LOADING", "count"=>"6401"},
  {"date"=>"2020-09-15", "work_category"=>"PALLET STAGING", "count"=>"6649"},
  {"date"=>"2020-09-15", "work_category"=>"PUTAWAY", "count"=>"4974"},
  {"date"=>"2020-09-15", "work_category"=>"RECEIVING", "count"=>"4108"},
  {"date"=>"2020-09-16", "work_category"=>"CASE PICKS", "count"=>"16842"},
  {"date"=>"2020-09-16", "work_category"=>"LOADING", "count"=>"4987"},
  {"date"=>"2020-09-16", "work_category"=>"PALLET STAGING", "count"=>"5716"},
  {"date"=>"2020-09-16", "work_category"=>"PUTAWAY", "count"=>"6292"},
  {"date"=>"2020-09-16", "work_category"=>"RECEIVING", "count"=>"4894"},
  {"date"=>"2020-09-17", "work_category"=>"CASE PICKS", "count"=>"24849"},
  {"date"=>"2020-09-17", "work_category"=>"LOADING", "count"=>"5303"}
]

只需要遍历数组一次。

arr.each_with_object([]) do |h,arr|
  arr << h["count"] if h["work_category"] == "CASE PICKS"
end
  #=> ["21315", "16842", "24849"]

【讨论】:

  • 这可能在内存和 CPU 上效率更高。
【解决方案2】:

首先,使用select 过滤项目,然后使用map 仅提取计数。

counts = arr
  .select { |item| item["work_category"] == "CASE PICKS" }
  .map { |item| item["count"] }

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2022-01-10
    • 1970-01-01
    • 2012-03-27
    • 2018-10-25
    • 1970-01-01
    • 2013-05-17
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多