在插入期间有效地对数组项进行排序

时间:2017-07-13 10:51:39

标签: swift sorting

我有一系列部分:

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()

1 个答案:

答案 0 :(得分:1)

对于每批物品:

  1. 将每个项目添加到部分的临时数组中。
  2. 对每个临时数组进行排序。
  3. 将已排序的临时数组与该部分已排序的数组合并。合并两个已排序的数组是一种非常有效的操作。