拆解数组(Decomposing Arrays)
拆解数组(Decomposing Arrays)
文章翻译自objc,原文连接:『Decomposing Arrays』
下边的代码将一个Array拆解到一个元组中,元组第一项是数组的第一个元素,元组的第二项是数组除去第一个元素后的剩余元素组成的数组,若为Array是空的,返回nil:
extension Array {
var decompose : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil
}
}
当你把它和if语句或者模式匹配(pattern matching)结合使用的时候,会感觉卓有成效,这里有一个递归求和的例子:
func sum(xs: [Int]) -> Int {
if let (head, tail) = xs.decompose {
return head + sum(tail)
} else {
return 0
}
}
你可以轻松创建其他类型的拆解函数,比如 dictionaries(字典) 或者 strings。