Сортировать массив словарей, где ключ неизвестен - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть массив словарей типа [[String:SchoolModel]]. Ключи - это идентификатор школы, а затем модель школы содержит информацию о школе, например, ее название. Я хочу отсортировать этот массив по SchoolModel.name, но не могу понять, как мой ключ является уникальным идентификатором для каждого элемента в массиве.

struct SchoolModel {
   var name: String
   var city: String
   var state: String
}

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете получить доступ к первому значению каждого итеративного словаря, чтобы получить имя.

struct SchoolModel {
    var name: String
    var city: String
    var state: String
}

let schools: [[String:SchoolModel]] = [
    ["1": SchoolModel(name: "1", city: "a", state: "x")],
    ["2": SchoolModel(name: "2", city: "b", state: "y")],
    ["3": SchoolModel(name: "3", city: "c", state: "z")]
]

print(schools.sorted {
    guard
        let a = $0.values.first?.name,
        let b = $1.values.first?.name else { return false }

    return a < b
})

Однако вы должны рассмотреть возможность добавления свойства id в вашу структуру. Вы можете сделать его необязательным, чтобы вы могли инициировать SchoolModel, который еще не был создан.

struct SchoolModel {
    var id: String?
    var name: String
    var city: String
    var state: String
}

Затем, где бы вы ни заполняли массив словарей, добавляйте объект SchoolModel, не встраивая его в словарь, в результате получается массив типа [SchoolModel].

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