iOS swift : Sort array into multidimensional array

标签 ios arrays swift icloud cloudkit

我有一组 CKRecords。每条记录都有 startTimeName 等值。我想做的是首先按唯一的 startTime 对记录进行排序,然后在每个 startTime 内按唯一的 Name 排序。

最终结果将是一个如下所示的数组(我认为):records = [Date: [Name: [CKRecord]]]

这是我现在拥有的:

func buildIndex(records: [CKRecord]) -> [[CKRecord]] {
var dates = [NSDate]()
var result = [[CKRecord]]()

for record in records {
    var date = record.objectForKey("startTime") as! NSDate

    if !contains(dates, date) {
        dates.append(date)
    }
}

for date in dates {
    var recordForDate = [CKRecord]()

    for (index, exercise) in enumerate(exercises) {
        let created = exercise.objectForKey("startTime") as! NSDate

        if date == created {
            let record = exercises[index] as CKRecord
            recordForDate.append(record)
        }
    }
    result.append(recordForDate)
}

return result
}

let records = self.buildIndex(data)

最佳答案

为什么不使用sorted?像这样。

// A simplified version of your `CKRecord` just for demonstration
struct Record {
    let time: NSDate
    let name: String
}

let records = [
    Record(time: NSDate(timeIntervalSince1970: 1), name: "a"),
    Record(time: NSDate(timeIntervalSince1970: 2), name: "b"),
    Record(time: NSDate(timeIntervalSince1970: 1), name: "c"),
    Record(time: NSDate(timeIntervalSince1970: 3), name: "d"),
    Record(time: NSDate(timeIntervalSince1970: 3), name: "e"),
    Record(time: NSDate(timeIntervalSince1970: 2), name: "f"),
]

func buildIndex(records: [Record]) -> [[Record]] {
    var g = [NSDate: [Record]]()
    for e in records {
        if (g[e.time] == nil) {
            g[e.time] = []
        }
        g[e.time]!.append(e) // grouping by `time`
    }
    return sorted(g.keys) { (a: NSDate, b: NSDate) in
        a.compare(b) == .OrderedAscending // sorting the outer array by 'time'
    }
    // sorting the inner arrays by `name`
    .map { sorted(g[$0]!) { $0.name < $1.name } } 
}

println(buildIndex(records))

关于iOS swift : Sort array into multidimensional array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28788732/

相关文章:

ios - 如何为 SFSpeechRecognitionTask 设置委托(delegate)?

iPhone 自定义电话联系人的电话响铃方式

ios - Swift:无法将类型 'Item?' 的值分配给类型 'Item?.Type'

swift - Swift 中的#pragma 标记?

swift - 如何在 swift 中为 detailTextLabel 加粗文本

ios - NEHotspotConfiguration 中的 joinOnce 是做什么的?

python - 如何检查 Numpy 数组是否是另一个更大数组的子数组

java - toString() 不适用于父类(super class)和子类

c - 使用 qsort 对结构数组进行排序

ios - 带有 cast 的快速可选链接