首页 > 解决方案 > 数组在另一个数组中出现了多少次?

问题描述

我是 Ruby on Rails 的新手。这个问题似乎在其他编程语言中得到了回答,但在 RoR 中却没有。

我有一个包含 3 个项目的数组。

array1 = [1, 2, 3]

array1然后我在另一个数组中有项目,我想检查并查看出现了多少次array2

array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 10, 11, 2, 12, 3]

答案应该是2。

标签: ruby-on-railsarraysruby

解决方案


您可以尝试以下方法:

a1.map { |a1i| a2.count(a1i) }.min

这是计算每个项目array1出现的频率array2,然后获取最小计数作为没有交集的可能子数组的数量。

我对@Stefan 建议的看法的粗略表示是:

a1.product([0]).to_h.merge(
  a2.group_by(&:itself).transform_values(&:size)
).values_at(*a1).min

还有一个更合理的:

count_per_a2i = a2.group_by(&:itself).transform_values(&:size)
a1.map { |a1i| count_per_a2i[a1i] }.min_by(&:to_i)

推荐阅读