如何在 Swift 中通过属性对结构体进行排序

16 浏览
0 Comments

如何在 Swift 中通过属性对结构体进行排序

此问题已经有答案了:

如何在Swift中按属性值对自定义对象的数组进行排序

我正在尝试根据其属性对结构体数组进行排序。

假设我想按x坐标对NSViews数组进行排序。

我该如何实现呢?

admin 更改状态以发布 2023年5月22日
0
0 Comments

注意,您可以简化语法,这通常有助于提高可读性(重点在于您正在做什么,而不是类型等语法):

let sortedArray = sorted(allViewsArray) {
    $0.frame.origin.x < $1.frame.origin.x
}

尾随闭包可以在函数调用圆括号外部,类似于其他块结构,如ifwhile;如果闭包表达式是单个语句,则可以跳过return,并且可以跳过函数签名并使用$0$1等表示参数名称。

当没有更多有用的名称可用时,最后的名称最好只使用$0等(例如,p1不比$0更具描述性)。如果您确实想要为它们命名,则仍然可以跳过类型:

let sortedArray = sorted(allViewsArray) { p1, p2 in
    p1.frame.origin.x < p2.frame.origin.x
}

Swift在应用此语法糖时有时可能有点脆弱,因此偶尔会发现它不能缩短多少,但通常会起作用。

0
0 Comments

这是一个非常漂亮的解决方案,它被称为闭包表达式语法

你需要做的是:

let sortedArray = sorted(allViewsArray, { (p1: NSView, p2: NSView) -> Bool in
            return p1.frame.origin.x < p2.frame.origin.x
        })

这将把alLViewsArray从最大的X坐标排序到最小的,并将其存储在sortedArary中。

0