美文网首页
Swift中 Array的冷门方法

Swift中 Array的冷门方法

作者: 南森北寞 | 来源:发表于2017-03-10 11:19 被阅读0次

先搬好小板凳买包瓜子,对了还有辣条········

reserveCapacity

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

stringArray = [String]()

stringArray.reserveCapacity(99)

lexicographicallyPrecedes

lexicographic百度翻译告诉我这个是“字典”(词典)这个方法声明在 AnyCollection 里。会按照顺序比较两个集合元素的大小。

举个爪子(例子): 比较两个字符串版本号的大小

versionOne ="0.0.1"

versionTwo ="2.0.1"

extensionString {

func versionToInt()-> [Int] {

returnself.components(separatedBy:".")

.map{Int.init($0) ??0}

}

}

//true

versionOne.versionToInt().lexicographicallyPrecedes(versionTwo.versionToInt())

partition

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

varnumbers = [30,40,20,30,30,60,10]

letp = numbers.partition(by: { $0>30})

// p == 5

// numbers == [30, 10, 20, 30, 30, 60, 40]

lethead = numbers.prefix(upTo: p)

// head == [30, 10, 20, 30, 30]

letend = numbers.suffix(from: p)

// end == [60, 40]

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

sequence(first: next: )

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

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

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

forviewinsequence(first: someView, next: { $0.superview }) {// someView, someView.superview, someView.superview.superview, ...}

代码没上传图片 敲粗来 格式自理

相关文章

网友评论

      本文标题:Swift中 Array的冷门方法

      本文链接:https://www.haomeiwen.com/subject/qhungttx.html