swift - 在不使用 for 循环的情况下高效地在 iOS 中快速相交对象数组

标签 swift

我想将包含“People”对象的两个数组相交,每个数组的数组大小可能超过 10000,我想使用对象的“id”相交而不使用 for 循环。我已经使用循环我的解决方案但速度很慢。一些 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]

最佳答案

您可以使用 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
    }
}

关于swift - 在不使用 for 循环的情况下高效地在 iOS 中快速相交对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52702969/

相关文章:

ios - 重新定位超出屏幕框架的 View

ios - 在 UITabBarController swift 的 MoreController 中更改项目图标颜色

swift - 带有 Dexcom API : get output frames failed, 状态 8196 的 OAuthSwift

swift - iPhone SE 尺寸屏幕的 Xcode 自动布局问题

swift - let 和 var Swift REPL 中 const 的重新声明无效

ios - swift 原生支持 C 语言吗?

ios - 字符串中的两个 UIColors 使用 swift

json - Swift:使用 Alamofire 访问 JSON 中的字典和模型中的私有(private)变量

XCode 默认设置为使用 Swift 2.0?

ios - 如何处理 iOS 应用程序中的“返回 Safari”按钮单击