extension Array {
func flatten<T>() -> T[] {
let xs = (self as Any) as Array<Array<T>>
return xs.reduce(T[](), +)
}
}
它有效,但我不确定是否所有这些演员都是必需的。
有更好的方法吗?
为了进行比较,here是其中一个swift扩展库中的实现。我不确定他们是否也已经弄明白了 - 他们的实现始于以下评论:
//这里还有一些工作要做
答案 0 :(得分:4)
您无法在Swift中扩展特定类型的泛型类型:
extension Array<Int> {
}
错误:非标称类型&#39;数组&#39;不能延长
但是你可以编写一个采用特定类型数组的函数。如果要展平数组数组(Array<T[]>
,T[][]
或数组&gt;),您的函数签名将如下所示:
func flatten<T> (array: Array<T[]>) -> T[]
它需要一组T
数组,并返回一个T
数组。然后,您可以使用reduce
:
func flatten<T> (array: Array<T[]>) -> T[] {
return array.reduce(T[](), +)
}