我编写了一些代码来执行运行长度编码和解码。我将编码功能作为Array扩展中的一种方法,但我不能以类似的方式进行解码。这可能吗?我无法找到将新泛型类型引入扩展的任何方法。
func runLengthDecode<T: Equatable>(_ runLengthEncoding: [(element: T, count: Int)]) -> [T] {
return runLengthEncoding.flatMap{ repeatElement($0.element, count: $0.count)}
}
我希望这个函数也是Array的一个方法。有点像:
extension Array<T> where Element == (element: T, count: Int) {
func runLengthDecode() -> [T] {
return self.flatMap{ repeatElement($0.element, count: $0.count)}
}
}
答案 0 :(得分:1)
而不是约束数组扩展,而是将约束移动到您的方法:
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap{ repeatElement($0.element, count: $0.count) }
}
}
或只是
extension Array {
func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int) {
return flatMap(repeatElement)
}
}