🕌

[Feature #15590] 配列内で重複している要素があるかどうかを判定するメソッドを追加する提案

に公開

[Feature #15590] Add dups to Array to find duplicates

  • 配列内で重複している要素があるかどうかを判定するメソッドを追加する提案
    • array.detect { |value| array.count(value) > 1 } のようなコードを簡略化する
  • また、更に発展して以下のように重複した要素を取得する案もかかれていますね
def dups_for(array)
  duplicated_values = []
  tmp = {}
  array.each do |value|
    duplicated_values << value if tmp[value]
    tmp[value] = true
  end
  duplicated_values
end

array = [1, 2, 3, 1, 2]
pp dups_for(array)
# => [1, 1, 2]
  • 重複している要素があるかどうかはよく ary.uniq.size == ary.size みたに書くことが多いんですが確かに結構利用することは多いんですよね〜
  • なので標準でよりパフォーマンスがよい実装があれば普通に便利そうな気がする
  • ちなみに重複している要素を取得したい場合は以下のように Set を利用するコードも提示されている
a = ["Tokyo", "Paris", "London", "Miami", "Paris", "Orlando", "Dubai", "Tokyo", "Paris"]
s = Set.new
p a.select{|e| !s.add?(e)} #=> ["Paris", "Tokyo", "Paris"]
GitHubで編集を提案

Discussion