Ruby - 在数组中查找重复项

Joe*_*ton 0 ruby arrays

我正在尝试在 Ruby 中编写一个方法,该方法采用大小为 N 的数组并在数组中查找重复项并列出重复项。

我在创建范围为 0..N-2 的数组时遇到问题。

它告诉我 N 是一个未初始化的常量。如何创建这样的数组?

Ric*_*ton 8

这是一种选择

def list_duplicates(array)
  duplicates = array.select { |e| array.count(e) > 1 }
  duplicates.uniq
end
Run Code Online (Sandbox Code Playgroud)

我在这里测试了

 list_duplicates([1,1,4,5,6,6,9]
 => [1,6]
Run Code Online (Sandbox Code Playgroud)

  • 这会起作用,但在更大的阵列上会变得几何上更慢。 (3认同)

tad*_*man 5

您始终可以使用简单的计数器哈希:

def duplicate_count(array)
  array.each_with_object(Hash.new(0)) do |value, hash|
    # Keep a count of all the unique values encountered
    hash[value] += 1
  end.count do |(value,count)|
    # Compute how many have a count > 1
    count > 1
  end
end

duplicate_count([1,2,3,4])
# => 0

duplicate_count([1,2,2,3,4,4,2])
# => 2
Run Code Online (Sandbox Code Playgroud)

如果您希望返回重复的值:

def duplicate_count(array)
  array.each_with_object(Hash.new(0)) do |value, hash|
    # Keep a count of all the unique values encountered
    hash[value] += 1
  end.each_with_object([ ]) do |(value,count), result|
    # Collect those with count > 1 into a result array.
    if (count > 1)
      result << value
    end
  end
end
Run Code Online (Sandbox Code Playgroud)