gpt4 book ai didi

ios - 按多个键值对数据进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 06:45:35 24 4
gpt4 key购买 nike

我有一个包含两个实体的基本列表应用 FolderItem对于多对多关系,文件夹子类有一个名为 itemsArray() 的函数它返回按 creationDate 排序的数组中的 Items显示UITableView .

Item有两个属性称为 date类型 NSDate和另一个类型 bool称为 completed .我创建了一个函数,我可以在其中将单元格项对象标记为已完成,这会将单元格文本颜色更改为灰色。

有没有办法我也可以按其完成值对其进行排序?例如 completed true 或 false 的值应分隔所有已完成的项目,然后还按 creationDate 对其进行排序.

最终结果应该是已完成项目位于 UITableView 底部的位置。并按日期顺序以及未完成的项目按日期顺序排列。好像完成的优先级高于日期但仍按 creationDate 排序

这是我当前的函数,带有排序描述符以返回一个数组;

func itemsArray() -> [Item] {
let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: true)
return checklist.sortedArrayUsingDescriptors([sortDescriptor]) as! [Item]
}

PS:我尝试了一些变通方法,例如将日期标记为已完成更新使其位于底部。这将已完成的项目与未完成的项目分开。但是,当取消标记该项目时,它仍保留在底部,这也不是一个好的长期解决方案,因为我可能想将排序更改为按字母顺序和完成。

最佳答案

您可以将另一个 NSSortDescriptor 添加到函数中:

func itemsArray() -> [Item] {
let sortByCompleted = NSSortDescriptor(key: "completed", ascending: true)
let sortByCreationDate = NSSortDescriptor(key: "creationDate", ascending: true)
return checklist.sortedArrayUsingDescriptors([sortByCompleted, sortByCreationDate]) as! [Item]
}

ascending 值以首先获得 truefalse。或者 Swifty 的做事方式:

func itemsArray() -> [Item] {
return checklist.sort {
if $0.completed == $1.completed {
return $0.creationDate < $1.creationDate
}
return $0.completed < $1.completed
}
}

关于ios - 按多个键值对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277844/

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