Swift iOS macOS 字符串 插入到已排序的数组中,字符串对比

今天需要实现这样一个功能:
有一个字符串 ​​​ad​​​,需要按顺序插入到这样一个字符串数组中。
注意:这个数组中有近8万条数据,所以不可能每添加一个数据都重新排序一下,这样会很耗费时间和资源

var arr = ["a", "ab", "ac", "abz", "nnqi", "nnq", "nnec"]

实现方法

  1. 先将数组排序
  2. 然后找到需要插入到的字符串应该在数组中的位置
  3. 插入它

​swift​​ 中默认的字符串对比是这样的:

// 以下均为 true
"aa" > "a"
"b" > "aa"
"ab" > "aa"

如果你有特殊的对比需求,可以查看官方文档中有没有对应的可选字符串对比参数:​​NSString.CompareOptions​

// 1. 原数组
var arr = ["a", "ab", "ac", "abz", "nnqi", "nnq", "nnec"]

// 2. 排序
arr.sort(by: <)
// 排序后:["a", "ab", "abz", "ac", "nnec", "nnq", "nnqi"]

// 3. 需要插入的字符串
let itemNeedInsert = "ad"

// 4. 获取需要插入的位置 index
if let index = arr.firstIndex(where: {$0 > itemNeedInsert}) {
print(index)
// 5. 取到位置 4

// 6. 插入到数组的指定位置
arr.insert(itemNeedInsert, at: index)
}

print(arr)
//7. 结果: ["a", "ab", "abz", "ac", "ad", "nnec", "nnq", "nnqi"]