我有一个文件数组。该文件符合以下File类:
class File {
var name: String?
var type: String?
var timeStamp: Date?
}
let array = [file1,file2,file3,file4]
该类型可能具有值" dir" ," jpg"," png" ," mov"
我现在想根据类型,名称和日期戳对数组进行排序。首先,我想分组相似类型的文件。例如,dir文件应首先出现在其他文件中。现在,我想根据名称和基于日期戳的其他文件类型对dir类型文件进行排序。
我写的是这段代码:
self.directoryContents = self.directoryContents?.sorted(by: { (file1, file2) -> Bool in
if file1.type == file2.type {
return file1.name! > file1.name!
}else {
return file1.timeStamp! > file2.timeStamp!
}
})
我无法实现所需的排序。任何帮助都会非常感激。
答案 0 :(得分:0)
这应该适用于所有情况。
extension File {
static func < (lhs: File, rhs: File) -> Bool {
// name/date comparison logic
let sortByNameThenDate: (File, File) -> Bool = { file1, file2 in
if file1.name! == file2.name! {
return file1.timeStamp! < file2.timeStamp!
} else {
return file1.name! < file2.name!
}
}
// overall comparison logic
if lhs.type! == rhs.type! {
return sortByNameThenDate(lhs, rhs)
} else if lhs.type! == "dir" {
return true
} else if rhs.type! == "dir" {
return false
} else {
return lhs.type! < rhs.type!
}
}
}
使用类似:
self.directoryContents = self.directoryContents?.sorted(by: { $0 < $1 })