代码之家  ›  专栏  ›  技术社区  ›  Pebbles

rubyonrails:合并(或附加?)来自哈希数组和数组数组的值

  •  0
  • Pebbles  · 技术社区  · 3 年前

    我有一个数组,包含客户机总数、订单总数、订单总值和位置的聚合数据。

    current_clients => [
    [293, 2846, 28365.00, Glasgow],
    [958, 8174, 85551.50, Edinburgh],
    [177, 982, 10783.75, Inverness]
    ]
    

    prospective_clients => [
    {location: Edinburgh, count: 2433},
    {location: Glasgow, count: 1076},
    {location: Inverness, count: 524}
    ]
    

    我需要将它们组合成一个新的数组(或者将哈希数组的值附加到现有数组中),这样我就可以将这些数据输出到一个报告中,向客户经理展示他们在每个位置的市场渗透率。为此,我需要遍历数组并在位置值上匹配它们,因为位置在数组中不一定总是处于相同的顺序。

    market_penetration => [
    [293, 2846, 28365.00, Glasgow, 1076],
    [958, 8174, 85551.50, Edinburgh, 2433],
    [177, 982, 10783.75, Inverness, 524]
    ]
    

    我知道一旦我得到了市场渗透数据,如何把它放到一个表中,但我就是不知道如何把这两个数据合并或附加起来。如果这有什么不同/使生活更轻松,那么可以将预期的\u客户机列表作为另一个数组而不是散列数组来获取。

    我只在Ruby on Rails上工作了几个月,我所做的所有教科书和在线课程都只涉及使用数组或哈希的简化示例;似乎没有任何地方涵盖处理更复杂数组和哈希数组的实际应用,别介意把它们结合起来。。。提前感谢您提供的任何建议/解决方案。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Arun Kumar Mohan    3 年前

    您可以生成一个哈希,以便使用 each_with_object current_clients 数组并添加客户端计数。

    prospective_clients_hash = prospective_clients.each_with_object({}) do |client, acc|
      acc[client[:location]] = client[:count]
    end
    
    #=> {"Edinburgh"=>2433, "Glasgow"=>1076, "Inverness"=>524}
    
    market_penetration = current_clients.map do |client|
      location = client[3]
      [*client, prospective_clients_hash[location]] # * is the splat operator
    end
    
    #=> [[293, 2846, 28365.0, "Glasgow", 1076], [958, 8174, 85551.5, "Edinburgh", 2433], [177, 982, 10783.75, "Inverness", 524]]