我有一个 pdf 文件数组(见附件截图),我需要按字母顺序排序。这是生成数组的代码,有人可以建议更改以对数组进行排序吗?
import UIKit
var pdfsArray = [String]()
class PDFListViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let fm = FileManager.default
let path = Bundle.main.resourcePath!
let items = try! fm.contentsOfDirectory(atPath: path)
for item in items {
if item.hasSuffix(".pdf") {
pdfsArray.append(item.uppercased())
}
let sortedFiles = pdfsArray.sorted()
pdfsArray = sortedFiles
}
答案 0 :(得分:0)
很简单,您只需调用 swift 的 sort
(或 sorted
)函数并提供 sort-function 以按数值排序:
var array = ["Part 45", "Part 1", "Part 10", "Part 20", "Part 100", "Part 2"]
array.sort { st1, st2 in
st1.compare(st2, options: .numeric) == .orderedAscending
}
答案 1 :(得分:0)
因此,根据您的要求,您需要将 item
string
分隔成一个 [string]
第一部分包含“零件编号”,第二部分包含 pdf 名称。
struct PDFile : CustomStringConvertible {
var part : String
var name : String
init(name: String) {
let arr = name.components(separatedBy: " ")
self.name = arr.dropFirst(2).joined(separator: " ")
self.part = arr[0] + " " + arr[1]
}
var description: String {
return "\"\(part) \(name)\""
}
}
然后你可以改变你的
var pdfsArray = [String]()
到
var pdfsArray = [PDFile]()
然后改变
pdfsArray.append(item.uppercased())
到
pdfsArray.append(PDFile(name: item.uppercased())
并通过使用对数组进行排序
pdfsArray.sort { $0.name < $1.name }
这将得到你想要的输出
["PART 1 DEFINITIONS ABBREVIATIONS AND UNITS OF MEASUREMENT.PDF", "PART 101 GYROGLIDERS-PARASAILS-UNMANNED-AIRCRAFT-INCL-BALLOONS-KITES-ROCKETS.PDF", "PART 100 SAFETY AND EQUALITY MANAGEMENT SYSTEMS.PDF", "PART 102 UNMANNED-AIRCRAFT-OPERATOR-CERTIFICATION.PDF"]