【问题标题】:How to sort array of dictionary by key?如何按键排序字典数组?
【发布时间】:2021-04-24 16:09:01
【问题描述】:

我正在尝试对字典数组进行排序,但无法做到。

JSON 数组: [{"2": "5"}, {"0": "1"}, {"1": "3"}, {"3": "6"}]

预期数组[{"0": "1"},{"1": "3"},{"2": "5"},{"3": "6"}]

我正在尝试这个,但无法获得预期的结果。

print(otpInputView.enteredValues.flatMap({ (dic) in
            return dic.keys.sorted()
        })

我期待高阶函数输出。 (手动我可以实现)

【问题讨论】:

  • 什么是otpInputView.enteredValues?是否将解码后的 JSON 数组存储为 [[String: String]]
  • enteredValues 是一个字典数组[[String:Any]],而 otpInputView 是另一个类对象。

标签: ios arrays sorting swift5


【解决方案1】:

您的代码正在对字典键进行排序,但您应该对 数组 进行排序, 存在的单个字典键。如您所见,输出数组中的字典已重新排列,这就是您应该对数组而不是字典进行排序的原因。

otpInputView.enteredValues.sorted {
    ...
}

现在我们有了字典$0$1,我们想要比较它们的单个键(假设所有字典都只有一个键)。我们可以这样做:

otpInputView.enteredValues.sorted {
    $0.keys.first! < $1.keys.first!
}

这会按字典顺序对键进行排序。键似乎都是数字。如果是这种情况,并且您希望它们是数字,请先将它们解析为Ints:

otpInputView.enteredValues.sorted {
    Int($0.keys.first!)! < Int($1.keys.first!)!
}

我在这里使用了很多!,因为我对字典的键做了很多假设。如果您无法做出这些假设,请安全地打开这些选项并使用默认值。

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 2023-03-30
    • 1970-01-01
    • 2017-05-30
    • 2021-11-27
    • 2011-06-17
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多