Swift-如何使用对象数组对表进行分组
我有以下课程:Swift-如何使用对象数组对表进行分组,swift,swift2,Swift,Swift2,我有以下课程: class ProviderSchedule : AnyObject { var providerUid : String = "" var lastName : String = "" var firstName : String = "" var scheduleRegion : String = "" var scheduleAmount : Float = 0 init () { } } 然后,我
class ProviderSchedule : AnyObject {
var providerUid : String = ""
var lastName : String = ""
var firstName : String = ""
var scheduleRegion : String = ""
var scheduleAmount : Float = 0
init () {
}
}
然后,我创建了一个该对象的数组,以设置UITableView的源
var tableData : Array<ProviderSchedule> = []
我需要的是按以下方式对数据进行分组:
lastName
和firstName
这样名称就会出现在表的group部分
你知道怎么做吗
将数据转换为更适合包含组的表的格式。创建一个类来表示组键,如下所示:
class GroupKey : Hashable {
let firstName : String
let lastName : String
init(fn:String, _ ln:String) {
firstName = fn
lastName = ln
}
... // Implement Hashable and Equatable
}
现在制作一个GroupKey
对象数组,并根据需要对它们进行排序:
var groupSet = Set<GroupKey>()
for s in tableData {
groupSet.insert(GroupKey(s.firstName, s.lastName))
}
let sortedGroups = Array(groupSet)
sortedGroups.sort {
$0.firstName < $1.firstName
|| ($0.firstName == $1.firstName && $0.lastName < $1.lastName)
}
最后,实现提供节信息的方法:
func numberOfSectionsInTableView(_ tableView: UITableView) -> Int {
return sortedGroups.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return scheduleGroup[section].count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let key = sortedGroups[section]
return "\(key.lastName), \(key.firstName)"
}
将数据转换为更适合包含组的表的格式。创建一个类来表示组键,如下所示:
class GroupKey : Hashable {
let firstName : String
let lastName : String
init(fn:String, _ ln:String) {
firstName = fn
lastName = ln
}
... // Implement Hashable and Equatable
}
现在制作一个GroupKey
对象数组,并根据需要对它们进行排序:
var groupSet = Set<GroupKey>()
for s in tableData {
groupSet.insert(GroupKey(s.firstName, s.lastName))
}
let sortedGroups = Array(groupSet)
sortedGroups.sort {
$0.firstName < $1.firstName
|| ($0.firstName == $1.firstName && $0.lastName < $1.lastName)
}
最后,实现提供节信息的方法:
func numberOfSectionsInTableView(_ tableView: UITableView) -> Int {
return sortedGroups.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return scheduleGroup[section].count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let key = sortedGroups[section]
return "\(key.lastName), \(key.firstName)"
}
providerUid、lastName和firstName是分组依据的字段。您的问题太复杂,无法理解。忘记单词group by,用其他单词解释它,或者告诉我们你想按什么顺序对它进行分组。你必须使用嵌套数组或带后备数组的字典来进行排序。在创建
ProviderSchedule
对象时准备/填充数组。所以我需要在对象之外创建数组吗?有关于如何进行分组的示例吗?providerUid、lastName和firstName是分组依据的字段。您的问题太复杂,难以理解。忘记单词group by,用其他单词解释它,或者告诉我们你想按什么顺序对它进行分组。你必须使用嵌套数组或带后备数组的字典来进行排序。在创建ProviderSchedule
对象时准备/填充数组。所以我需要在对象之外创建数组吗?有没有关于如何做到这一点的例子?@VAAA请查看编辑。如果您还为每个组添加一个数组,那么您的代码将更加高效。这也会让你更容易到达每一行。明白了。。。让我来实现一个问题,hashable://MARK:-hashable var hashValue:Int{get{return(firstName+“”+lastName).hashValue}中有一个错误:sortedGroups.sort表达式太复杂,无法在合理的时间内解决;考虑把表达式分解成不同的子表达式)@ VAAA,我认为XCODEL不能解析它,因为它是在尾随关闭形式。尝试在大括号部分周围加上括号,或使用未修改的格式(即使用中的)重写闭包。@VAAA请查看编辑。如果您还为每个组添加一个数组,那么您的代码将更加高效。这也会让你更容易到达每一行。明白了。。。让我来实现一个问题,hashable://MARK:-hashable var hashValue:Int{get{return(firstName+“”+lastName).hashValue}中有一个错误:sortedGroups.sort表达式太复杂,无法在合理的时间内解决;考虑把表达式分解成不同的子表达式)@ VAAA,我认为XCODEL不能解析它,因为它是在尾随关闭形式。尝试在大括号部分周围加上括号,或使用未加修饰的格式(即使用
中的)重写闭包。