Swift методы проверки дубликатов массива

Чтобы проверить наличие дубликатов в массиве в Swift, вы можете использовать различные методы. Вот несколько подходов с примерами кода:

Метод 1: использование набора

func hasDuplicates<T: Hashable>(array: [T]) -> Bool {
    let uniqueElements = Set(array)
    return uniqueElements.count != array.count
}
// Example usage
let array1 = [1, 2, 3, 4, 5]
print(hasDuplicates(array: array1)) // Output: false
let array2 = [1, 2, 3, 3, 4, 5]
print(hasDuplicates(array: array2)) // Output: true

Метод 2. Использование словаря

func hasDuplicates<T>(array: [T]) -> Bool where T: Hashable {
    var dictionary = [T: Int]()
    for element in array {
        if let count = dictionary[element] {
            return true
        }
        dictionary[element] = 1
    }
    return false
}
// Example usage
let array3 = ["apple", "banana", "orange"]
print(hasDuplicates(array: array3)) // Output: false
let array4 = ["apple", "banana", "orange", "banana"]
print(hasDuplicates(array: array4)) // Output: true

Метод 3. Использование метода contains

func hasDuplicates<T>(array: [T]) -> Bool where T: Equatable {
    for (index, element) in array.enumerated() {
        if array[index+1...].contains(element) {
            return true
        }
    }
    return false
}
// Example usage
let array5 = [1, 2, 3, 4, 5]
print(hasDuplicates(array: array5)) // Output: false
let array6 = [1, 2, 3, 3, 4, 5]
print(hasDuplicates(array: array6)) // Output: true

Метод 4. Использование класса NSCountedSetиз Foundation

import Foundation
func hasDuplicates<T>(array: [T]) -> Bool where T: Hashable {
    let countedSet = NSCountedSet(array: array)
    for element in countedSet {
        if countedSet.count(for: element) > 1 {
            return true
        }
    }
    return false
}
// Example usage
let array7 = ["a", "b", "c"]
print(hasDuplicates(array: array7)) // Output: false
let array8 = ["a", "b", "c", "b"]
print(hasDuplicates(array: array8)) // Output: true