arrays - 与 Swift 中的另一个数组相比对数组重新排序

标签 arrays swift swift3

<分区>

我在 Swift 中有一个数组包含一些对象的 id,我有另一个数组包含这些对象及其 id,所以像这样:

class MyObject {
   let id: String
   ...
}

let ids: [String] = ...
let objects: [MyObject] = ...

现在 ID 数组已按某种自定义顺序排序,我需要按相同顺序对对象数组进行排序。例如:

let ids: [String] = ["1", "2", "3"]
let objects: [MyObject] = [obj3, obj1, obj2]
// obj1.id = "1"
// obj2.id = "2"
// obj3.id = "3"
objects.reorder(template: ids) 
// Now objects = [obj1, obj2, obj3]

所以我基本上需要实现这个重排序方法。 有没有人对如何在 Swift 中执行此操作有明智的建议?我正在使用 Swift 3,所以所有新的 API 都可供我使用。

最佳答案

您可以对objects 进行排序,以便按照ids 编写中的顺序

let sorted = objects.sort { ids.indexOf($0.id) < ids.indexOf($1.id) }
// [{id "1"}, {id "2"}, {id "3"}]

另一个例子

let ids: [String] = ["3", "2", "1"]
let objects: [MyObject] = [MyObject(id: "3"), MyObject(id: "1"), MyObject(id: "2")]

let sorted = objects.sort { ids.indexOf($0.id) < ids.indexOf($1.id) }
// [{id "3"}, {id "2"}, {id "1"}]

This code is in Swift 2.2


Swift 4.2 解决方案

let sorted = objects.sorted { ids.index(of: $0.id)! < ids.index(of: $1.id)! }

关于arrays - 与 Swift 中的另一个数组相比对数组重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273370/

相关文章:

java - 运行程序查找最大数组时出现数组索引越界异常

arrays - 匹配三个排序列表的算法

swift - Xcode 11.3 : can't select deployment target 13. 3

swift - 为什么 '=' 赋值运算符在我的 didSet 属性观察器的 if 语句中不起作用?

ios - NSUserDefaults - 保存和检索 "High Scores"

ios - Swift 3 中的二维数组

python - 在 python 中将 2D 切片合并到 3D 体积

c++ - 将数组传递给递归函数

ios - swift, tableView selectedTypes 按钮

ios - 创建网页并从中异步加载应用程序数据