繁体   English   中英

Ruby - 在数组中查找重复项

[英]Ruby - Find duplicates in an array

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

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

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

这是一种选择

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]

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

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

您可以编写以下代码

def duplicate_value(array)
  array.select{|v| array.count(v) > 1}.uniq
end

duplicate_value([1, 2, 1, 3, 3])
=> [1, 3]

对变量使用小写...对常量保留大写。

并将变量传递给方法。

def my_method(n)
  # your method goes here 
end

惯例是对诸如total_rabbitsmy_dragon类的变量使用蛇形大小写,但您可以使用诸如totalRabbitsmyDragon类的嵌入式大写字母。 只要第一个字符是小写(或下划线)。

我刚刚写了这个,它有效,我想要反馈,所以我在这里分享。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM