В этой статье блога мы рассмотрим различные методы подсчета повторяющихся элементов в массиве с помощью 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