まとめ:Pipeline Builder
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 43/56。
チャレンジ
中級クロージャによって駆動される小さなデータパイプラインを構築します。
3行を読み込みます:
- 整数
min - 整数
scale - カンマ区切りの整数のリスト
2つのクロージャファクトリを定義します:
makeFilter(min: Int) -> (Int) -> Boolはminをキャプチャし、述語n > minを返しますmakeScaler(by: Int) -> (Int) -> Intはbyをキャプチャし、それを掛ける関数を返します
次に、最初にフィルタリングを行い、その後に変換を行う関数 pipeline(_ nums: [Int], filter: (Int) -> Bool, transform: (Int) -> Int) -> [Int] を定義します。
3行出力します:
- フィルタを通過した数値を
,で連結したもの - スケーリング後の同じ数値を
,で連結したもの - スケーリングされた値の合計
入力が 5 / 3 / 2,7,3,8,9 の場合、出力は以下の通りです:
7,8,9
21,24,27
72自分で試してみよう
let minVal = Int(readLine()!)!
let scale = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: クロージャを返す makeFilter / makeScaler、pipeline(_:filter:transform:) を作成。
// その後、フィルタリングされた値、スケールされた値、およびスケールされた値の合計を出力する。