我正在尝试在 Ruby 中编写一个方法,该方法采用大小为 N 的数组并在数组中查找重复项并列出重复项。
我在创建范围为 0..N-2 的数组时遇到问题。
它告诉我 N 是一个未初始化的常量。如何创建这样的数组?
这是一种选择
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)
您始终可以使用简单的计数器哈希:
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)