昨天说要输xpath语法,但是呢今天在公司被折腾了一天没有找到好的题材和做完好的技术储备,于是呢这会结合官方文档拿些小知识点来做个今天的总结……
map
Returns an array containing the results of mapping the given closure over the sequence’s elements.
我们来解释一下:大意是这么回事,就是你对已有的数组进行一次内部元素遍历的转化。说白了就是进去抓一圈,出来可以是阿猫阿狗?
下面是个?
var array = [1,2,3,4]
var toStrArray = array.map { (value:Int) -> String in
return "\(value)"
}
我们将数据转一圈转换成 [String]
compactMap
Returns an array containing the non-nil
results of calling the given transformation with each element of this sequence.
我们来解释一下:同样是转一圈,进行转化的过程中可能有事败不符合规则的 比如 String -> Int ,怎么办?这个就内部消化掉,只把成功的返回给你
let charArray = ["A", "B","1","2345"]
var intValues = charArray.compactMap { (value:String) -> Int? in
return Int(value)
}
map compactMap对比
同:
都按照规则把数据进行一个类型转化
不同
map 对于不按规则的同样给你返回一个值 nil
compactMap 对于转化失败的丢弃掉,也就是说只返回符合规矩被转化的数据
测试数据["A", "B","1","2345"]
结果 [1, 2345] [nil, nil, Optional(1), Optional(2345)]
flatMap
Returns an array containing the concatenated results of calling the given transformation with each element of this sequence.
大意是返回一个数组,这个数组包含所有按照规则转换过程中转换出的数组的元素
是不是感觉定义比较绕,我们拆分成两个部分步骤来说:
1 转换规则是将源数组中的元素进来之后返回出一个数组
2 对返回的数组进行合并
我们按照这过程使用上述测试
var flatArray = charArray.flatMap { (value:String) -> Array<Any> in
return Array(repeating: value, count: value.count)
}
var test = charArray.map { (value:String) -> Array<String> in
return Array(repeating: value, count: value.count)
}
flatMap 结果 ["A", "B", "1", "2345", "2345", "2345", "2345"]
map 结果 [["A"], ["B"], ["1"], ["2345", "2345", "2345", "2345"]]
我们发现 flatMap = map.joined
print(flatArray as! [String] == Array(test.joined()))
打印结果是 true完全一样,当然了,这个只是一个用例,感兴趣的可以自己多测试几个用例