gpt4 book ai didi

arrays - 对数组中相似的对象进行排序和分组

转载 作者:行者123 更新时间:2023-11-30 11:38:11 26 4
gpt4 key购买 nike

我有一个文件数组。该文件符合以下 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!
}

})

我无法实现所需的排序。任何帮助将不胜感激。

最佳答案

这应该适用于所有情况。

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

关于arrays - 对数组中相似的对象进行排序和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49512560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com