fuz*_*uzz 4 arrays generics swift
extension Array {
func flatten<T>() -> T[] {
let xs = (self as Any) as Array<Array<T>>
return xs.reduce(T[](), +)
}
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我不确定是否需要所有这些转换。
有没有更好的办法?
为了进行比较,这里是 swift 扩展库之一中的实现。我不确定他们是否也已经弄清楚了——他们的实施始于以下评论:
// 这里还有一些工作要做
你不能在 Swift 中扩展泛型类型的特定类型:
extension Array<Int> {
}
Run Code Online (Sandbox Code Playgroud)
错误:非标称类型“Array”无法扩展
但是您可以编写一个采用特定类型数组的函数。如果您想展平数组的数组(Array<T[]>或T[][]Array>),您的函数签名将如下所示:
func flatten<T> (array: Array<T[]>) -> T[]
Run Code Online (Sandbox Code Playgroud)
它接受一个数组的数组T并返回一个数组T。然后您可以使用您的方法reduce:
func flatten<T> (array: Array<T[]>) -> T[] {
return array.reduce(T[](), +)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |