我正在尝试在Ruby中编写一个方法,它接受一个大小为N的数组,并在数组中找到重复项并列出重复项。
我在创建范围为0..N-2的数组时遇到问题。
它告诉我N是未初始化的常量。我如何创建这样的数组?
答案 0 :(得分:3)
您始终可以使用简单的计数器哈希:
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
如果您希望返回重复的值:
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
答案 1 :(得分:1)
这是一个选项
def list_duplicates(array)
duplicates = array.select { |e| array.count(e) > 1 }
duplicates.uniq
end
我在这里测试了
list_duplicates([1,1,4,5,6,6,9]
=> [1,6]
答案 2 :(得分:1)
为变量使用小写字母...大写字母为常量保留。
将变量传递给方法。
def my_method(n)
# your method goes here
end
惯例是对total_rabbits
或my_dragon
等变量使用snake case,但您可以使用嵌入式大写字母,如totalRabbits
或myDragon
。只要第一个字符是小写(或下划线)。
答案 3 :(得分:0)
您可以编写以下代码
def duplicate_value(array)
array.select{|v| array.count(v) > 1}.uniq
end
duplicate_value([1, 2, 1, 3, 3])
=> [1, 3]
答案 4 :(得分:0)
我刚刚写了这个,它有效,我希望得到反馈,所以我在这里分享。
def duplicate_array(arr)
duplicates = []
while arr.size != 1
pivot = arr.shift
arr.each do |element|
if element.eql?(pivot)
next if duplicates.include?(element)
duplicates << element
end
end
end
duplicates
end