gpt4 book ai didi

ios - 改进两个数组 Swift 的比较

转载 作者:行者123 更新时间:2023-11-28 09:49:24 35 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中单击其他用户个人资料,然后该应用程序将比较两个用户的电话联系人并搜索共同联系人。那行得通,但是会花费很多时间,所以我想知道是否有一种方法可以至少加快一点速度。

****请注意,我是 iOS 开发的初学者,对 Swift 语法和一般 iOS 还不是很熟悉,因此非常感谢任何帮助

这是我的简单 Contact 类:

class Contact: Hashable, Equatable {
var hashValue: Int { get { return phoneNumber!.hashValue } }
var name: String?
var phoneNumber: String?
var thumbnail: Data?
var filled: Bool?

init() {
}

init(name: String?, phoneNumber: String?, thumbnail: Data?) {
self.name = name
self.phoneNumber = phoneNumber
self.thumbnail = thumbnail
}
static func ==(lhs: Contact, rhs: Contact) -> Bool {
return lhs.phoneNumber == rhs.phoneNumber
}
}

如您所见,我已经实现了 HashableEquatable,我用它来按电话号码比较联系人并删除重复项。这是我执行主要比较操作的代码。 contacts 数组包含用户的电话联系人,otherContacts 是其他用户的电话联系人数组。

                for result in self.contacts {
if self.otherContacts.contains(result){
self.commonContacts.append(result)
}
}
self.removedDuplicates = Array(Set(self.commonContacts))
if self.removedDuplicates.count == 1 {
self.commonFriends.text = "\(1) common friend"
}
else {
self.commonFriends.text = "\(self.removedDuplicates.count) common friends"
}

谢谢。

最佳答案

对于数组,包含具有O(n) 性能。因此,根据另一个数组检查一个数组中的所有元素具有 O(n^2)(n 平方)性能,这很糟糕。

将电话号码从一个数组复制到一个集合中,并使用 Setcontains(_:) 函数,它具有非常接近常数时间的性能,为您提供总的 O(n) 性能,这要好得多,好得多

关于ios - 改进两个数组 Swift 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52047820/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com