Подсчет повторяющихся элементов в массиве с использованием Ruby: подробное руководство

В этой статье блога мы рассмотрим различные методы подсчета повторяющихся элементов в массиве с помощью Ruby. Независимо от того, являетесь ли вы новичком или опытным разработчиком Ruby, это руководство предоставит вам различные методы решения этой распространенной проблемы программирования. Итак, давайте углубимся и научимся эффективно подсчитывать дубликаты в массиве!

Метод 1: использование хеша
Один из самых простых подходов — использовать хеш для отслеживания частоты каждого элемента. Вот пример:

def count_duplicates(array)
  counts = Hash.new(0)
  array.each { |element| counts[element] += 1 }
  counts.select { |_element, count| count > 1 }.keys.length
end
# Usage example
arr = [1, 2, 3, 4, 5, 2, 3, 4, 4, 5]
puts count_duplicates(arr) # Output: 4

Метод 2: использование метода group_by
Ruby предоставляет метод group_by, который группирует элементы по определенному критерию. Мы можем использовать этот метод для подсчета дубликатов:

def count_duplicates(array)
  array.group_by(&:itself)
       .select { |_element, duplicates| duplicates.length > 1 }
       .keys.length
end
# Usage example
arr = [1, 2, 3, 4, 5, 2, 3, 4, 4, 5]
puts count_duplicates(arr) # Output: 4

Метод 3: использование метода tally(Ruby 2.7+)
Начиная с Ruby 2.7 был введен новый метод под названием tally, который упрощает процесс подсчета. :

def count_duplicates(array)
  array.tally.select { |_element, count| count > 1 }.keys.length
end
# Usage example
arr = [1, 2, 3, 4, 5, 2, 3, 4, 4, 5]
puts count_duplicates(arr) # Output: 4

Метод 4. Использование Set
Другой подход — использовать структуру данных Set для отслеживания повторяющихся элементов:

require 'set'
def count_duplicates(array)
  unique_set = Set.new
  duplicates_set = Set.new
  array.each do |element|
    if unique_set.include?(element)
      duplicates_set.add(element)
    else
      unique_set.add(element)
    end
  end
  duplicates_set.length
end
# Usage example
arr = [1, 2, 3, 4, 5, 2, 3, 4, 4, 5]
puts count_duplicates(arr) # Output: 4