【发布时间】:2020-12-21 17:58:41
【问题描述】:
我想知道领域列表是如何快速实现的。更具体地说,我想知道它们是链接列表还是它们的工作方式类似于数组列表。例如,在索引处检索项目的时间复杂度是多少。假设我有一个长度为 m 的领域列表 A,我想检索 A[n],这个操作会像链接列表一样在 O(n) 中运行,还是像在数组列表中一样在 O(k) 中运行。
编辑:
以下是对问题的进一步澄清:
假设我想将用户的好友列表存储在 Realm 数据库中。我这样做的方法是定义一个新的类用户,如下所示:
Class User: Object{
@objc dynamic var name: String?
@objc dynamic var userName: String?
@objc dynamic var email: String?
var friendList = RealmSwift.List<String>() //Contains the names of all friends
}
假设我已将一些朋友添加到用户的朋友列表中,并且我想在我的应用程序中的其他位置访问此朋友列表并显示特定的朋友:
var realm = try! Realm()
var user = realm.objects(User.self)[0]
var friendToDisplay = user.friendList[4]
print(friendToDisplay)
我想知道user.friendList[4] 操作的时间复杂度是多少。如果 Realm 将 RealmSwift.List 视为链表,那么复杂度必须是 O(n),而如果当用户被调用到内存时,RealmSwift.List 被实现为 ArrayList 然后访问列表中的第四个内存地址将是 O(1)。
我的好奇心来自于想知道哪个会更快:
- 遍历列表并找到我们想要显示的朋友的名字:
var realm = try! Realm()
var user = realm.objects(User.self)[0]
var friendName = "Peter"
for friend in user.friendList{
if friend == friendName {
print(friend)
}
}
或
- 知道我们要显示的朋友的索引,比如说索引 4:
var realm = try! Realm()
var user = realm.objects(User.self)[0]
var friendToDisplay = user.friendList[4]
print(friendToDisplay)
在这两种情况下,假设朋友的姓名或我们正在使用的索引存在于朋友列表中。
【问题讨论】:
-
这将是非常主观的并且是特定于用例的,因为 Realm 对象是延迟加载的,而不是像传统的 Array 或 Linked List 实现那样“保存在内存中”。您能否提供一个示例用例并澄清问题?
-
您好@Jay 感谢您的回复,很抱歉我的问题不够清楚。我添加了一个示例以使其更清晰。
标签: swift realm realm-list