簡體   English   中英

Swift iOS-將數組過濾為類似對象的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM