ios - 对不包括元素的数组进行排序
问题描述
我有一组在表格视图中显示的自定义类型的元素。每个元素都有属性,尤其是“级别”之一(0、1、2 或 3 作为 Int)
我想要做什么:
我想按它们的级别对这些元素进行排序,但只在表格视图的顶部显示级别 3 的元素,并忽略级别 < 3 的其他元素。
我尝试过的:
- self.elements.sort(by: { $0.level! > $1.level! })
=> 所有事件都已排序
- if element.level! > 2 {
self.elements.sort(by: { $0.level! > $1.level! })
}
=> 不工作
我真的不知道该怎么办......有什么想法吗?
谢谢 !
编辑
对不起,我可能不太清楚:
我有一个元素数组,我首先按与用户的距离排序,然后只希望第 3 级元素位于表格视图的顶部。理想情况下,我希望这些 3 级元素也按距离排序。
--> 我想要的输出:按距离排序的元素,顶部有 3 级元素,我还希望这些 3 级元素按距离排序
(抱歉英语不是我的第一语言)
解决方案
当您必须处理这种可能反复出现且非常具体的操作时,我鼓励您创建可重用的扩展。
有一个例子:
您的 CustomClass(仅用于示例目的)
class CustomClass {
var text: String!
var level: Int!
convenience init(text: String, level: Int) {
self.init()
self.text = text
self.level = level
}
}
一种扩展方法模型(可重复使用和修改)
extension Array where Element:CustomClass {
mutating func sortWithFilter(minLevel: Int) {
let list = self.sorted(by: { $0.level > $1.level})
self = list.filter( { $0.level > minLevel })
}
}
用法:
// Create array with your CustomClass
var array = [CustomClass]()
// Add some data
array.append(CustomClass(text: "info1", level: 1))
array.append(CustomClass(text: "info2", level: 3))
array.append(CustomClass(text: "info3", level: 2))
array.append(CustomClass(text: "info4", level: 3))
array.append(CustomClass(text: "info5", level: 0))
// Use our new extension method
array.sortWithFilter(minLevel: 2)
输出:
text : info2 , level : 3
text : info4 , level : 3
我希望它有帮助:)
推荐阅读
- angular - @Input() 上的触发函数已更改
- java - SSLHandshakeException 与 jlink 创建运行时
- c - 即使 IF 语句为假,字符指针数组也会被覆盖
- javascript - Javascript井字游戏:如何提醒用户他赢了?
- c++ - 获取 __m256 变量中不为零的第一个元素的索引
- vb.net - 如果通过代理作业或 TSQL 运行,脚本任务中带有 SSRS 报告的 SSIS 包将不起作用
- django - 当表单中还存在其他字段时,获取图像的 content_type 的问题
- c++ - 如何降低这段代码的复杂度
- amazon-s3 - 使用 Amazon SES、Lambda 和 S3 跟踪内部和外部电子邮件的打开和点击?
- angular - 如何在 Angular 7 中等待 DOM 更改就绪?