Преобразование функции Swift 3 в Swift 4 - PullRequest
0 голосов
/ 28 сентября 2018

Я изо всех сил пытаюсь преобразовать эту функцию в Swift 4

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 } } 
}

Я надеюсь, что кто-то может мне помочь.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Здесь есть что убирать.Имена переменных, очевидно, являются катастрофой, но и принудительное развертывание.Все это можно заменить простым звонком на Dictionary.init(grouping:by:)

import Foundation

struct Record {
    let time: Date
    let name: String
}

func buildIndex(records: [Record]) -> Any {
    return Dictionary(grouping: records, by: { $0.time })
        .mapValues { $0.sorted { $0.name < $1.name} }
        .sorted { (pair1, pair2) in pair1.key < pair2.key }
}
0 голосов
/ 28 сентября 2018

Попробуйте

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 g.keys.sorted { (a: NSDate, b: NSDate) in
        a.compare(b as Date) == .orderedAscending // sorting the outer array by time
        }
        // sorting the inner arrays by `name`
        .map { g[$0]!.sorted { $0.name < $1.name } }
}

Надеюсь, это помогло вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...