按键排序的Swift字典
由于Dictionary
[关于]是基于哈希函数的,因此无法像我们通常使用的那样使用排序函数(如Array)。作为替代方案,您可以实现一种类似于Java TreeMap/TreeSet的方式。
最简单的方法是使用.sorted(by:)
函数。它返回一个已排序的key/value
元组的Array
,易于处理。
例如:
struct Person {
let name: String
let age: Int
}
struct Section {
let header: String
let rows: [Int]
}
let persons = [
Person(name: "A", age: 1),
Person(name: "B", age: 1),
Person(name: "C", age: 1),
Person(name: "A", age: 2),
Person(name: "B", age: 2),
Person(name: "C", age: 2),
Person(name: "A", age: 3),
Person(name: "B", age: 3),
Person(name: "C", age: 3),
]
let personsGroupedByName: [String : [Person]] = Dictionary(grouping: persons, by: { $0.name })
let sortedPersonsGroupedByName: [Dictionary<String, [Person]>.Element] = personsGroupedByName.sorted(by: { $0.0 < $1.0 })
let sections: [Section] = sortedPersonsGroupedByName.compactMap { (key: String, value: [Person]) -> Section in
let rows = value.map { person -> Int in
return person.age
}
return Section(header: key, rows: rows)
}
KeyType
替换为您特定字典中键的类型(看起来您正在使用字符串)。 - Sergey Kalinichenko