У меня есть массив Ruby, который содержит дубликаты элементов.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Как я могу удалить все повторяющиеся элементы из этого массива, сохранив при этом все уникальные элементы без использования циклов for и итерации?
ruby-on-rails
arrays
ruby
duplicates
Митхун Сасидхаран
источник
источник
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
он выполняет работу над самим объектомВы можете вернуть перекресток.
Это также удалит дубликаты.
источник
a | a
(union) сделало бы то же самое.Вы можете удалить дубликаты элементов с помощью метода uniq:
Также полезно знать, что это
uniq
занимает блок, поэтому, если у вас есть массив ключей:и вы хотите узнать, что это за уникальные файлы, вы можете узнать это с помощью:
источник
uniq
в этот массив без блока вернет то же значение, что и для вашего блока.Просто еще одна альтернатива, если кому-то все равно.
Вы также можете использовать
to_set
метод массива, который преобразует массив в набор, и по определению элементы набора являются уникальными.источник
to_set
выделите 4 объекта, аuniq
выделите один.Если кто-то искал способ удалить все экземпляры повторяющихся значений, см. « Как эффективно извлечь повторяющиеся элементы в массиве Ruby? ».
источник
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Просто чтобы дать некоторое представление:
Что, при запуске, приводит к:
Примечание: эти результаты дали плохие результаты:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
источник
Попробуйте использовать оператор XOR, не используя встроенные функции:
Со встроенными функциями:
источник
.sort!
встроенная функция?