如何排序数组的字典如果2个键值是相同的在ios swift [关闭]

q5iwbnjs  于 2023-03-24  发布在  iOS
关注(0)|答案(1)|浏览(143)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

3天前关闭。
Improve this question
我是初学者,我想排序的字典数组,如果2个关键字的值是相同的。下面是示例数据。

let arrData: [[String: Any]] = [
  ["CategoryCode": "10", "code": "10", "text": "TEN"],
  ["CategoryCode": "11", "code": "11.05", "text": "ELEVEN POINT ZERO FIVE"],
  ["CategoryCode": "11", "code": "11", "text": "ELEVEN"],
  ["CategoryCode": "10", "code": "10.10", "text": "TEN POINT TEN"],
  ["CategoryCode": "10a", "code": "10.12", "text": "TEN POINT TWELVE"],
  ["CategoryCode": "10a", "code": "10a", "text": "TEN A"]]

如果“CategoryCode”和“Code”具有相同的值,我想重新排序arrData并将对象放在顶部。
预期输出:

let arrData: [[String: Any]] = [
  ["CategoryCode": "10", "code": "10", "text": "TEN"],
  ["CategoryCode": "10a", "code": "10a", "text": "TEN A"],
  ["CategoryCode": "11", "code": "11", "text": "ELEVEN"],
  ["CategoryCode": "10", "code": "10.10", "text": "TEN POINT TEN"],
  ["CategoryCode": "10a", "code": "10.12", "text": "TEN POINT TWELVE"],
  ["CategoryCode": "11", "code": "11.05", "text": "ELEVEN POINT ZERO FIVE"]]

请帮助我怎么做。提前谢谢

ee7vknir

ee7vknir1#

我的第一条评论是...不要使用Dictionary。这里面的“代码味道”是你在使用Any。你应该在Swift中避免这种情况。
创建一个struct来保存你的数据,并定义你希望它如何排序。

struct Category {
  let category: String
  let code: String
  let text: String
}

现在你可以创建你的数组像...

let arrData: [Category] = [
  .init(category: "10", code: "10", text: "TEN"),
  .init(category: "11", code: "11", text: "ELEVEN"),
  .init(category: "10", code: "10.10", text: "TEN POINT ONE"),
  .init(category: "11", code: "11.05", text: "ELEVEN POINT ZERO FIVE"),
]

现在您可以定义两个Category如何排序。

extension Category: Comparable {
  static func <(lhs: Category, rhs: Category) -> Bool {
    if lhs.category >= rhs.category {
      return lhs.code < rhs.code
    }

    return lhs.category < rhs.category
  }
}

现在要对数组排序...

let arrData = // your array

let sortedArray = arrData.sorted(<)

相关问题