给定这个数组数组,我如何计算包含重复元素的数组的数量?

mar*_*ion 0 ruby arrays ruby-on-rails ruby-on-rails-6

我有一个看起来像这样的数组:

[[["Sports", "Soccer"], 2], [["eSports"], 1], [["Sports", "Soccer"], 3]]
Run Code Online (Sandbox Code Playgroud)

在最外层数组的任何元素中,第一个元素(数组)是类别列表。第二个元素是program.id这个类别数组来自。

因此,取上述数组中的第一个元素 -["Sports", "Soccer"]是 的类别数组program_id: 2

如何计算类别数组重复的实例?在上述情况下,我想要的是这样的:

["Sports", "Soccer"] => Occurs 2 times, with Program Ids: 2 & 3
["eSports"] => Occurs 1 time, with Program Id: 1
Run Code Online (Sandbox Code Playgroud)

我如何有效地做到这一点?

Cas*_*per 5

grouped = array.group_by { |s, id| s }.transform_values { |v| v.map(&:last) }

=> { ["Sports", "Soccer"] => [2, 3], 
     ["eSports"]          => [1] }
Run Code Online (Sandbox Code Playgroud)

要使用它:

grouped.each { |k,v| 
  puts "[#{k.join(', ')}] occurs #{v.length} time(s) with ID: #{v.join(' and ')}" 
}

[Sports, Soccer] occurs 2 time(s) with ID: 2 and 3
[eSports] occurs 1 time(s) with ID: 1
Run Code Online (Sandbox Code Playgroud)