Ruby on Rails:将散列数组中的值与数组数组组合(或追加?)

Ruby on Rails: combine (or append?) values from array of hashes with an array of arrays

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

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]
]

我知道如何将市场渗透数据放入 table 中,但我不知道如何将两者结合或附加。如果它使 difference/makes 生活更轻松,则可以将 prospective_clients 列表作为另一个数组数组,而不是哈希数组。

我只在 Rails 上使用 Ruby 几个月,我完成的所有教科书和在线课程都只涉及使用数组或使用哈希;似乎没有任何地方涵盖处理更复杂的数组数组和哈希数组的现实生活应用,不要介意尝试将它们组合起来......提前感谢您可以分享的任何advice/solutions。

您可以使用 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]]