Swift中Array冷门方法拾遗

reserveCapacity

如果明确的知道一个数组的容量大小,可以调用这个方法告诉系统这个数组至少需要的容量,避免在数组添加元素过程中重复的申请内存。

var alphabet = [String]()
alphabet.reserveCapacity(26)

lexicographicallyPrecedes

lexicographic 是词典的意思。这个方法声明在 AnyCollection 里。会按照顺序比较两个集合元素的大小。
比如下面代码展示了如何比较两个字符串版本号的大小:

let storeVersion = "3.14.10"
let currentVersion = "3.130.10"

extension String {
    func versionToInt() -> [Int] {
        return self.components(separatedBy: ".")
            .map { Int.init($0) ?? 0 }
    }
}

//true
storeVersion.versionToInt().lexicographicallyPrecedes(currentVersion.versionToInt())

partition

partition 会根据条件把集合里的元素重新排序,符合条件的元素移动到最后,返回一个两个部分分界元素的索引。

var numbers = [30, 40, 20, 30, 30, 60, 10]
let p = numbers.partition(by: { $0 > 30 })
// p == 5
// numbers == [30, 10, 20, 30, 30, 60, 40]

let head = numbers.prefix(upTo: p)
// head == [30, 10, 20, 30, 30]
let end = numbers.suffix(from: p)
// end == [60, 40]

再通过prefix和suffix可以分别获得集合的两段元素。

sequence(first: next: )

根据next里的闭包来生成下一个元素,和reduce完全相反。特别的是这个函数返回的是一个 UnfoldSequence ,即里面的值是lazy的,只要在访问时才生成,这也可能是一个无限的队列。

for x in sequence(first: 0.1, next: { $0 * 2 }).prefix(while: { $0 < 4 }) {
    // 0.1, 0.2, 0.4, 0.8, ...
}

似乎特别适合用来寻祖,当next闭包返回的是nil时队列就终止了:

for view in sequence(first: someView, next: { $0.superview }) {
    // someView, someView.superview, someView.superview.superview, ...
}

elementsEqual

用来判断两个队列的是否拥有相同的元素,并且顺序是一致的

let a = 1...3
let b = 1...10
 
print(a.elementsEqual(b))
// Prints "false"
print(a.elementsEqual([1, 2, 3]))
// Prints "true"

欢迎关注我的微博:@没故事的卓同学

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

推荐阅读更多精彩内容

  • 先搬好小板凳买包瓜子,对了还有辣条········ reserveCapacity 在明确的知道一个数组的容量大小...
    南森北寞阅读 862评论 0 1
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,518评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 2016-03-02写歌君我要写歌体验站 文箫原创音乐 静谧森林 本周邀请到的是纯音乐创作人文箫,以下是写歌君对他...
    我要写歌阅读 882评论 0 0
  • 今夜,人生中再次内心动荡 我以为我聪明 我以为我坚强 我以为自己没有贪欲 我以为自己没有悲伤 却不知一个人的心 已...
    雨初33阅读 144评论 0 0