gpt4 book ai didi

arrays - 按类型对结构数组进行排序,然后按另一个属性按字母顺序排序

转载 作者:行者123 更新时间:2023-11-28 13:25:06 25 4
gpt4 key购买 nike

假设我有以下设置。

我正在尝试对 [first, second, third] 进行排序按字母顺序和 category .

我想要featured首先是项目,然后是按 title 排序的所有其他内容.

我试过了 let output = [first, second, third].sort { $0.category == $1.category ? $0.category && $1.category == .featured : $0.title < $1.title }

但这是一场彻头彻尾的灾难。

最终结果应该是排序后的标题显示为 foo bar baz

    enum Category {
case featured, standard
}

struct Article {
var title: String
var category: Category
}

let first = Article(title: "bar", category: .standard)
let second = Article(title: "foo", category: .featured)
let third = Article(title: "boo", category: .standard)

let output = [first, second, third]

最佳答案

更具扩展性的解决方案

当您进行嵌套排序时,您需要先对项目进行分组,然后再按这些组进行排序。例如,我们可以通过将 enum 限制为 Int 来定义具有 Int 值的类别的优先级:

enum Category: Int {
case featured // Higher level(value) -> Higher priority in sort
case standard // Lower level(value) -> Lower priority in sort
}

现在你应该:

  • 排序前对数据进行分组:
let grouped = Dictionary(grouping: input, by: { $0.category })
  • 排序组:(因此 Category 案例应该具有可排序的值,如 Int)
let sortedGroups = grouped.sorted { $0.key.rawValue < $1.key.rawValue } 
  • 对每个组的数据进行排序并将其映射回原始数组:
let result = sortedGroups.map { $0.value.sorted { $0.title < $1.title) } }

这种方法高度可扩展并且是自动化的。您只需要定义新类别来代替它们的优先级。其余代码始终按预期工作。

关于arrays - 按类型对结构数组进行排序,然后按另一个属性按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com