将通用自由函数转换为数组扩展
Convert generic free function into Array extension
我写了一些代码来执行 运行 长度编码和解码。我将我的编码函数作为数组扩展中的一种方法,但我无法以类似的方式进行解码。这可能吗?我找不到任何将新泛型类型引入扩展的方法。
func runLengthDecode<T: Equatable>(_ runLengthEncoding: [(element: T, count: Int)]) -> [T] {
return runLengthEncoding.flatMap{ repeatElement([=10=].element, count: [=10=].count)}
}
我希望这个函数也是 Array 上的一个方法。大致如下:
extension Array<T> where Element == (element: T, count: Int) {
func runLengthDecode() -> [T] {
return self.flatMap{ repeatElement([=11=].element, count: [=11=].count)}
}
}
不要约束数组扩展,而是将约束移至您的方法:
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap{ repeatElement([=10=].element, count: [=10=].count) }
}
}
或者干脆
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap(repeatElement)
}
}
我写了一些代码来执行 运行 长度编码和解码。我将我的编码函数作为数组扩展中的一种方法,但我无法以类似的方式进行解码。这可能吗?我找不到任何将新泛型类型引入扩展的方法。
func runLengthDecode<T: Equatable>(_ runLengthEncoding: [(element: T, count: Int)]) -> [T] {
return runLengthEncoding.flatMap{ repeatElement([=10=].element, count: [=10=].count)}
}
我希望这个函数也是 Array 上的一个方法。大致如下:
extension Array<T> where Element == (element: T, count: Int) {
func runLengthDecode() -> [T] {
return self.flatMap{ repeatElement([=11=].element, count: [=11=].count)}
}
}
不要约束数组扩展,而是将约束移至您的方法:
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap{ repeatElement([=10=].element, count: [=10=].count) }
}
}
或者干脆
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap(repeatElement)
}
}