我有一个结构体数组,想用sort()函数按照其中的两个变量之一进行排序
struct{
var deadline = 0
var priority = 0
}
我查看了Swift编程语言的文档中的sort()函数,但它只展示了简单数组。sort()能否使用,还是我需要自己构建?
下面这些排序函数完全相同,唯一的区别是它们有多简短和表意清晰:
完整声明:
myArr.sort { (lhs: EntryStruct, rhs: EntryStruct) -> Bool in
// you can have additional code here
return lhs.deadline < rhs.deadline
}
缩短的闭包声明:
myArr.sort { (lhs:EntryStruct, rhs:EntryStruct) in
return lhs.deadline < rhs.deadline
}
// ... or even:
myArr.sort { (lhs, rhs) in return lhs.deadline < rhs.deadline }
紧致闭包声明:myArr.sort { $0.deadline < $1.deadline }
完整声明:
let newArr = myArr.sorted { (lhs: EntryStruct, rhs: EntryStruct) -> Bool in
// you can have additional code here
return lhs.deadline < rhs.deadline
}
缩短的闭包声明:
let newArr = myArr.sorted { (lhs:EntryStruct, rhs:EntryStruct) in
return lhs.deadline < rhs.deadline
}
// ... or even:
let newArr = myArr.sorted { (lhs, rhs) in return lhs.deadline < rhs.deadline }
紧致闭包声明:
let newArr = myArr.sorted { $0.deadline < $1.deadline }
SortComparator
协议是否可以使您的操作更简单。适用于(macOS 12+,iOS 15+)。struct Task {
static var samples: [Self] = (0...5).map{ _ in .init() }
var deadline = Int.random(in: 0...20)
var priority = Int.random(in: 0...20)
}
Task.samples.sort(using: [
KeyPathComparator(\.deadline, order: .forward),
KeyPathComparator(\.priority, order: .reverse),
])
print(Task.samples)