🕌
[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"]
- これなんですが結構前のチケットなんですが最近
Array#duplicates?を追加する PR が出された
Discussion