如何在 Swift 中查找整数数组中的重复值?

nik*_*047 1 arrays foreach for-loop swift swift3

我需要知道如何通过循环方法快速查找整数数组中的重复值?我尝试->

func findDuplicates (array: [Int]) {
        var prevItem = array[0]
        for i in 0...array.count-1 {
            if prevItem == array[i] {
                print(i)
            } else {
               print("there is no any duplicates values")
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

请以这种方式展示我的解决方案!

Leo*_*bus 5

您可以使用集合,每次尝试插入元素都会失败,这意味着它是重复的。您还需要确保结果中不保留重复元素:

func findDuplicates (array: [Int]) {
    var set: Set<Int> = []
    for i in array {
        if !set.insert(i).inserted {
            print("duplicate element:", i)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
findDuplicates(array: [1,2,3,4,5,6,5,6,7,9])
Run Code Online (Sandbox Code Playgroud)

这将打印:

重复元素:5
重复元素:6

如果你想返回集合的所有重复元素,你可以简单地使用过滤器:

func getDuplicates(in array: [Int]) -> [Int] {
    var set: Set<Int> = []
    var filtered: Set<Int> = []
    return array.filter { !set.insert($0).inserted && filtered.insert($0).inserted }
}
Run Code Online (Sandbox Code Playgroud)
getDuplicates(in: [1,2,3,4,5,6,5,6,7,9])  // [5, 6]
Run Code Online (Sandbox Code Playgroud)

extension RangeReplaceableCollection where Element: Hashable {
    var duplicates: Self {
        var set: Set<Element> = []
        var filtered: Set<Element> = []
        return filter { !set.insert($0).inserted && filtered.insert($0).inserted }
    }
}
Run Code Online (Sandbox Code Playgroud)
let numbers = [1,2,3,4,5,6,5,6,7,9]
numbers.duplicates                   // [5, 6]
Run Code Online (Sandbox Code Playgroud)
let string = "1234565679"
string.duplicates                    // "56"
Run Code Online (Sandbox Code Playgroud)