Удалить дубликаты элементов из массива в Ruby

У меня есть массив Ruby, который содержит повторяющиеся элементы.

array = [1,2,2,1,4,4,5,6,7,8,5,6]

Как удалить все повторяющиеся элементы из этого массива, сохранив все уникальные элементы без использования for-loops и iteration?

Ответ 1

array = array.uniq

метод uniq удаляет все повторяющиеся элементы и сохраняет все уникальные элементы в массиве.

Одна из многих красавиц языка Ruby.

Ответ 2

Вы также можете вернуть пересечение.

a = [1,1,2,3]
a & a

Это также приведет к удалению дубликатов.

Ответ 3

Вы можете удалить повторяющиеся элементы с помощью метода uniq:

array.uniq  # => [1, 2, 4, 5, 6, 7, 8]

Что также может быть полезно знать, так это то, что метод uniq принимает блок, например, если у вас есть массив таких клавиш:

["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]

и вы хотите узнать, какие уникальные файлы вы можете найти:

a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }

Ответ 4

Если кто-то искал способ удалить все экземпляры повторяющихся значений, см. этот вопрос.

a = [1, 2, 2, 3]
counts = Hash.new(0)
a.each { |v| counts[v] += 1 }
p counts.select { |v, count| count == 1 }.keys # [1, 3]

Ответ 5

Еще одна альтернатива, если кто-то заботится.

Вы также можете использовать метод to_set для массива, который преобразует Array в Set и по определению, уникальные элементы набора.

[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]

Ответ 6

Это очень общий класс проблем со многими вариациями. Однако предпосылка остается прежней. Входной массив состоит из целых чисел, некоторые из которых могут быть дублированы. Мы должны напечатать все уникальные числа, присутствующие в этом массиве.

Проверьте полную реализацию здесь

Ответ 7

Попробуйте с оператором XOR в Ruby:

a = [3,2,3,2,3,5,6,7].sort!

result = a.reject.with_index do |ele,index|
  res = (a[index+1] ^ ele)
  res == 0
end

print result