首页 > 解决方案 > 在iOS swift中高效地交叉对象数组而不使用for循环

问题描述

我想相交两个包含“人”对象的数组,每个数组的数组大小可能超过 10000,我想使用对象的“id”相交而不使用 for 循环。我已经使用 for loop 我的解决方案,但速度很慢。一些 People 对象在两个数组中可以有相同的“id”,而一些对象可以有不同的“id”。

下面是我的代码示例

例子 :

class People {

    var id:Int!

    var name:String!

}

let object1 = People(10, John)

let object2 = People(5, Rocky)

let array1 = [object1, object2, .... , object10000]

let array2 = [objectA1, objectA2, .... , objectA10000]

标签: swift

解决方案


您可以使用 PeopleIds 创建 Set 并使用 Object Id 创建 Set,如下所示:

let peoples = ...
let objects = ...

let peoplesIds = peoples.map { $0.id }
let objectsIds = objects.map { $0.id }

let peoplesIdsSet = Set(peoplesIds)
let objectsIdsSet= Set(objectsIds)

let intersectionsIds = Array(peoplesIdsSet.intersection(objectsIdsSet))

另外,我建议您将其放在后台线程中,如下所示:

DispatchQueue.global(qos: .background).async {

    findIntersecionsIds()

    DispatchQueue.main.async {
        // done
    }
}

推荐阅读