Sha256: 1705b64f8ce47ad5eaf4a53f6de9ec752f958d0f40c1966c09209c1f587a74f8
Contents?: true
Size: 1.56 KB
Versions: 199
Compression:
Stored size: 1.56 KB
Contents
# frozen_string_literal: true module RuboCop module Cop # Common functionality for dealing with duplication. module Duplication private # Whether the `collection` contains any duplicates. # # @param [Array] collection an array to check for duplicates # @return [Boolean] whether the array contains any duplicates def duplicates?(collection) collection.size > 1 && collection.size > collection.uniq.size end # Returns all duplicates, including the first instance of the duplicated # elements. # # @param [Array] collection an array to return duplicates for # @return [Array] all the duplicates def duplicates(collection) grouped_duplicates(collection).flatten end # Returns the consecutive duplicates, leaving out the first instance of # the duplicated elements. # # @param [Array] collection an array to return consecutive duplicates for # @return [Array] the consecutive duplicates def consecutive_duplicates(collection) grouped_duplicates(collection).flat_map { |items| items[1..] } end # Returns a hash of grouped duplicates. The key will be the first # instance of the element, and the value an `array` of the initial # element and all duplicate instances. # # @param [Array] collection an array to group duplicates for # @return [Array] the grouped duplicates def grouped_duplicates(collection) collection.group_by { |item| item }.values.reject(&:one?) end end end end
Version data entries
199 entries across 192 versions & 19 rubygems