对键未知的字典数组进行排序

时间:2018-11-07 17:01:54

标签: arrays swift sorting dictionary

我有一组[[String:SchoolModel]]类型的字典。密钥是学校的ID,然后学校模型包含有关学校的信息,例如其名称。我想按SchoolModel.name对该数组进行排序,但由于我的键是数组中每个元素的唯一ID,因此无法弄清楚。

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

1 个答案:

答案 0 :(得分:1)

您可以访问每个字典的第一个值,以获取名称。

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]类型的数组。