首页 > 解决方案 > 对不包括元素的数组进行排序

问题描述

我有一组在表格视图中显示的自定义类型的元素。每个元素都有属性,尤其是“级别”之一(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 级元素按距离排序

(抱歉英语不是我的第一语言)

标签: iosarraysswiftsorting

解决方案


当您必须处理这种可能反复出现且非常具体的操作时,我鼓励您创建可重用的扩展。

有一个例子:

您的 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

我希望它有帮助:)


推荐阅读