2017-12-16 15 views
0

ランレングス符号化とデコードを実行するコードを書きました。私は配列の拡張のメソッドとして自分のエンコーディング関数を持っていますが、私は同様の方法でデコードを行うことはできません。これは可能ですか?拡張機能に新しいジェネリック型を導入する方法はありません。汎用フリー機能を配列拡張に変換

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)} 
    } 
} 

答えて

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) 
    } 
} 
+1

おやおや、私はどのように私を知りませんこれを逃した! – Alexander

関連する問題