Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-如何使用对象数组对表进行分组_Swift_Swift2 - Fatal编程技术网

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不能解析它,因为它是在尾随关闭形式。尝试在大括号部分周围加上括号,或使用未加修饰的格式(即使用
中的
)重写闭包。