对数组中的类似对象进行排序和分组

时间:2018-03-27 12:12:10

标签: arrays swift xcode sorting

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

                    })

我无法实现所需的排序。任何帮助都会非常感激。

1 个答案:

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