首页 > 解决方案 > 如何将数组的每个元素与其他元素进行比较?

问题描述

我需要在数组中找到对,我想通过将 arr[i] 与其他从 arr[i+1] 开始的比较来做到这一点,所以我不会两次检查相同的值,但我做不到。这是我尝试过的

func findPairs(_ ar: [Int]) -> Int {
    var pairs = 0
    for i in 0..<ar.count {
        var k = i + 1
        for k in 0..<ar.count {
            if ar[i] == ar[k] {
                pairs += 1
            }
        }
    }
    return pairs/2
}

更新澄清,在我的例子中,它是在数组 [1,2,3,1,2,3,4,5,1] 中给出的,我们有 3 对 [1,1] [2,2] [ 3,3]

标签: arraysswift

解决方案


您可能需要i + 1在内部循环中用作起始索引,如下所示:

func findPairs(_ ar: [Int]) -> Int {
    var pairs = 0
    for i in 0..<ar.count {
        let m = i + 1
        for k in m..<ar.count {
            if ar[i] == ar[k] {
                pairs += 1
            }
        }
    }
    return pairs
}

此外,您可以使用另一个数组来存储对的索引,这样您就不会对另一对使用相同的元素:

func findPairs(_ ar: [Int]) -> Int {
    var pairs = 0
    var pairIndexes = [Int]()
    for i in 0..<ar.count where !pairIndexes.contains(i) {
        let m = i + 1
        for k in m..<ar.count where !pairIndexes.contains(k) {
            if ar[i] == ar[k] {
                pairs += 1
                pairIndexes.append(contentsOf: [i, k])
                break
            }
        }
    }
    return pairs
}

推荐阅读