【问题标题】:How to sort structures by property in Swift [duplicate]如何在Swift中按属性对结构进行排序[重复]
【发布时间】:2015-06-13 20:41:17
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: swift sorting


    【解决方案1】:

    这是一个非常漂亮的解决方案,它被称为 Closure Expression Syntax。

    你需要做的是:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      只有在没有更多有用的名称时才最好使用最后一个(例如,p1 不比 $0 更具描述性)。如果你确实想给它们起名字,你仍然可以跳过类型:

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

      在应用这种语法糖时,Swift 有时会有点脆弱,所以有时你会发现它不能像应有的那样缩短,但它通常可以工作。

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 2020-04-24
        • 1970-01-01
        • 2011-02-23
        • 2020-10-06
        • 1970-01-01
        • 2018-03-17
        • 2014-09-06
        • 2010-10-26
        相关资源
        最近更新 更多