У меня есть массив Ruby, который содержит повторяющиеся элементы.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Как удалить все повторяющиеся элементы из этого массива, сохранив все уникальные элементы без использования for-loops и iteration?
У меня есть массив Ruby, который содержит повторяющиеся элементы.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Как удалить все повторяющиеся элементы из этого массива, сохранив все уникальные элементы без использования for-loops и iteration?
array = array.uniq
метод uniq удаляет все повторяющиеся элементы и сохраняет все уникальные элементы в массиве.
Одна из многих красавиц языка Ruby.
Вы также можете вернуть пересечение.
a = [1,1,2,3]
a & a
Это также приведет к удалению дубликатов.
Вы можете удалить повторяющиеся элементы с помощью метода 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 }
Если кто-то искал способ удалить все экземпляры повторяющихся значений, см. этот вопрос.
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]
Еще одна альтернатива, если кто-то заботится.
Вы также можете использовать метод to_set
для массива, который преобразует Array в Set и по определению, уникальные элементы набора.
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
Это очень общий класс проблем со многими вариациями. Однако предпосылка остается прежней. Входной массив состоит из целых чисел, некоторые из которых могут быть дублированы. Мы должны напечатать все уникальные числа, присутствующие в этом массиве.
Попробуйте с оператором 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