arrays - 比较数组元素(包括重复项)

标签 arrays ruby duplicates comparison

我试图查看一个数组是否包含另一个数组的每个元素。另外我想考虑重复项。例如:

array = [1, 2, 3, 3, "abc", "de", "f"]

数组包含 [1, 2, 3, 3] 但不包含 [2, 2, "abc"] - 2 太多

我已经尝试了以下方法,但显然没有考虑到欺骗。

other_arrays.each { |i| array.include? i }

最佳答案

此方法对两个数组迭代一次。 对于每个数组,它都会创建一个包含每个元素出现次数的哈希值。

然后,它会检查子集中中的每个唯一元素,超集中至少有同样多的元素。

class Array
  def count_by
    each_with_object(Hash.new(0)) { |e, h| h[e] += 1 }
  end

  def subset_of?(superset)
    superset_counts = superset.count_by
    count_by.all? { |k, count| superset_counts[k] >= count }
  end
end

[1, 2, 3, 3, "abc", "de", "f"].count_by
#=> {1=>1, 2=>1, 3=>2, "abc"=>1, "de"=>1, "f"=>1}

[1, 2, 3, 3].count_by
#=> {1=>1, 2=>1, 3=>2}

[1, 2, 3, 3].subset_of? [1, 2, 3, 3, "abc", "de", "f"]
#=> true
[2, 2, "abc"].subset_of? [1, 2, 3, 3, "abc", "de", "f"]
#=> false

如果您不想修补 Array 类,您可以定义:

count_by(array)subset_of?(array1, array2)

关于arrays - 比较数组元素(包括重复项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42008449/

相关文章:

ios - 检查数组是否包含Object :@(float) in Objective-C can unexpectedly return NO

javascript - 从多维数组中删除重复的元素对

Magento,网址重复,搜索引擎优化

python - 如何通过 Pandas 或 Spark 数据框删除所有行中具有相同值的列?

arrays - 如何将 PostgreSQL 中带有 JSON 数组字段的表解析为行?

java - 内联初始化最终变长数组

ruby - 如何使用 Nokogiri 选择元素

ruby - 基于 JSON 的 API 的 Warden 身份验证)

java - 旋转对象以放置在二维数组中

ruby - 覆盖模块的方法是一个好的约定吗?