【问题标题】:Sort Array of Dictionarys in Swift在 Swift 中对字典数组进行排序
【发布时间】:2018-07-17 14:23:30
【问题描述】:

大家好,我正在尝试通过在 swift 中使用 sorted by 对字典数组([["key": Int, "value": Any]] 格式)进行排序,但它无法正常工作。这是我的字典数组,这些字典包含一个字典,我在子字典中有一个唯一标识符,即“id”,我也有唯一键。请指导我。实际上我的数据格式如下。如何使用“id”获取值对其进行排序([“isMale”:false,“status”:“”,“name”:“John”,“id”:10)])

var dataArray  = [(key: 10, value: ["isMale": false, "status": "", "name": "John","id": 10)], (key: 2, value: ["isMale": false, "status": "", "name": "John","id": 2]), (key: 3, value: ["isMale": false, "status": "", "name": "John","id": 3]), (key: 7, value:
 ["isMale": false, "status": "", "name": "John","id": 7]), (key: 9, value: ["isMale": false, "status": "", "name": "John","id": 9]), (key: 4, value: ["isMale": false, "status": "", "name": "John","id": 4]), (key: 6, value: ["isMale": false, "status": "", "name": "John","id": 6]), (key: 5, value: ["isMale": false, "status": "", "name": "John","id": 5]), (key: 8, value: ["isMale": false, "status": "", "name": "John","id": 8]), (key: 11, value: ["isMale": false, "status": "", "name": "John","id": 11])];

var data = [Int:Any]() data = dataArray.sorted(by: { $0 < $1 })

【问题讨论】:

  • 排序的逻辑是什么?换句话说:什么定义了一个特定的 dict 在排序之后应该位于另一个 dict 的较低索引处?
  • let result = dataArray.sorted(by: {($0["key"] as! Int) &lt; ($1["key"] as! Int)})
  • 排序后我想得到所有的值
  • 实际上我的数据格式如下:[("key":"A", "value":["isMale": false, "status": "", "name": "John" ,"id": 10]), ("key":"B", "value":["isMale": false, "status": "", "name": "John","id": 2) , ("key":"C", "value":["isMale": false, "status": "", "name": "John","id": 3])]

标签: ios arrays swift sorting dictionary


【解决方案1】:

您可以像这样按 value["id"] 变量对dataArray 进行排序:

var dataArray  = [
    (key: 10, value: ["isMale": false, "status": "", "name": "John","id": 10]),
    (key: 2, value: ["isMale": false, "status": "", "name": "John","id": 2]),
    (key: 3, value: ["isMale": false, "status": "", "name": "John","id": 3]),
    (key: 7, value: ["isMale": false, "status": "", "name": "John","id": 7]),
    (key: 9, value: ["isMale": false, "status": "", "name": "John","id": 9]),
    (key: 4, value: ["isMale": false, "status": "", "name": "John","id": 4]),
    (key: 6, value: ["isMale": false, "status": "", "name": "John","id": 6]),
    (key: 5, value: ["isMale": false, "status": "", "name": "John","id": 5]),
    (key: 8, value: ["isMale": false, "status": "", "name": "John","id": 8]),
    (key: 11, value: ["isMale": false, "status": "", "name": "John","id": 11])];

let sorted = dataArray.sorted(by: {
    let id0 = $0.value["id"] as! Int
    let id1 = $1.value["id"] as! Int
    return id0 < id1
})

print(sorted.map { $0.key })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 2017-01-22
    • 1970-01-01
    • 2015-07-15
    • 2018-11-24
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多