我有一系列部分:
struct Section {
let title: String
var items: [Item]
}
其中包含项目列表:
struct Item {
let title: String
}
我想用未知数量的项填充它,并尽可能高效地对数据进行排序。我从远程源获取数据,并在数据进入时解析数据。我不知道发送的数据是否已排序,因此盲目地附加到Section
列表可能无法在这里工作。 / p>
我希望数据一进入(批量)就会显示给用户,所以我不能等到fetch操作结束才能执行排序。例如,让我们假设我得到的部分是:
let item = Item(title: "Foo")
let sectionTitle = item.characters.first!
if let section = sections.filter({ $0.title == String(sectionTitle) }) {
// find
} else {
// create
}
我的初步想法,一旦我找到正确的Section
,循环遍历Section
项,直到sectionItem.title > item.title
,那么这就成了插入点:
var insertionPoint = 0
for (i, val) in array.enumerated() {
insertionPoint = i
if val.title > item.title { break }
}
section.items.insert(item, at: insertionPoint)
Section
有许多Item
个对象后,这似乎效率低下。有更合适的方法吗?
我唯一的另一个想法是跟踪此批次中涉及的Section
项目,然后在每次批处理操作结束时运行section.items.sort()
。
答案 0 :(得分:1)
对于每批物品: