Swift 中的 数组排序 和 重载运算符

数组排序

首先拿到一个数组,然后这个是按照数字中Item元素的 name 属性来排序的代码片段:

  searchResults.sortInPlace({ result1, result2 in
    return result1.name.localizedStandardCompare(result2.name) == .OrderedAscending
  })

这个使用的方法是sortInPlace,还有另外一个方法是sort

如果使用了sort,那么原来的数组是不会有任何变化的,使用sortInPlace,会在原来的数组上做修改。

还可以简化为:

  searchResults.sortInPlace{
    $0.name.localizedStandardCompare($1.name) == .OrderedAscending
  }

第二种写法没有传统的括号 (),使用 $0 来标记两个 $1 数组中的对象可读性很好,这是 Swift 的闭包(Closures)中很好的一个特性。

运算符重载

另外,可以使用运算符重载(operator overloading)把这个做的更好:
在被排序对象的数组对象之外,记住是在Class之外,声明重载算术运算符的方法:

func < (lhs: SearchResult, rhs: SearchResult) -> Bool {
  return lhs.name.localizedStandardCompare(rhs.name) == .OrderedAscending
}

有了这个方法,刚刚的排序就可以写的更短:

  searchResults.sortInPlace{$0 < $1}

再短:

  searchResults.sortInPlace(<)

End.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,317评论 0 51
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,267评论 0 4
  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,457评论 0 49
  • 冷漠和温柔一样多
    鱼尾yalo阅读 166评论 0 0