[英]Swift iOS - Filter array into array of array like objects
我有一个带有子对象的对象数组。
我想基于子对象将数组排序为数组的数组
例如:的数组
[employee, employee, employee, employee]
现在我想做的就是这样排序->
[[employee.job.jobName = "baker",employee.job.jobName = "baker"],
[employee.job.jobName = "sweeper",employee.job.jobName = "sweeper"]]
目标是创建一个表格视图,其中节标题将其job.jobName相同的员工分组。 并且这些行将由这些雇员,他们的姓名等组成。为此,我需要一个组成部分数的雇员的唯一的job.jobNames数组,然后每个部分中的雇员数组组成行数。
我曾尝试使用array.map和array.filter,但我想我需要一种组合,但我似乎无法解决这个问题。 任何帮助将不胜感激!
这是我如何将员工数组拆分为数组的看法。
// Just needed to make the example work
struct Job {
var name: String
}
struct Employee {
var job: Job
}
/////////////////////////////////////////
let employees = [Employee(job: Job(name: "baker")), Employee(job: Job(name: "sweeper")), Employee(job: Job(name: "baker")), Employee(job: Job(name: "sweeper"))]
var jobs = Set<String>()
employees.forEach { jobs.insert($0.job.name) }
let sortedJobs = jobs.sort()
var groupedEmployees = [[Employee]]()
for jobName in sortedJobs {
groupedEmployees.append(employees.filter({ $0.job.name == jobName }))
}
print(groupedEmployees)
产生期望的输出:
[[main.Employee(job: main.Job(name: "baker")), main.Employee(job: main.Job(name: "baker"))], [main.Employee(job: main.Job(name: "sweeper")), main.Employee(job: main.Job(name: "sweeper"))]]
import UIKit
/*Data Structure for Employee*/
class Employee:NSObject{
/*Unemployed for default*/
var job:String = "unemployed"
init(job:String){
self.job = job
}
override var description: String {
return self.job
}
}
/**Returns the array of arrays of enmployees sorted by jobs*/
func sortEmployees(employees:[Employee])->[[Employee]]
{
//Sorting them by job
let sorted = employees.sort({$0.job < $1.job})
//Empty array of arrays
var sortedEmployees = [[Employee]]()
//job key
var currentKey = ""
for emp in sorted{
let tempKey = emp.job
//first element - edge case
if sortedEmployees.count == 0
{
currentKey = tempKey
sortedEmployees.append([emp])
}
else{
if tempKey != currentKey{
//create a new object
sortedEmployees.append([emp])
currentKey = tempKey
}
else{
//get last array
if let lastArray = sortedEmployees.last{
var tempLast = lastArray
tempLast.append(emp)
sortedEmployees.removeLast()
sortedEmployees.append(tempLast)
}
}
}
}
print(sortedEmployees)
return sortedEmployees
}
/**Sample iVars*/
let emp1 = Employee(job: "baker")
let emp2 = Employee(job: "baker")
let emp3 = Employee(job: "sweeper")
let emp4 = Employee(job: "sweeper")
//Array with all of them
let array = [emp1, emp2, emp3, emp4]
let result = sortEmployees(array)
print(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.