Junkor

拆解数组(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。