Menu
CoddyTech

まとめ:List Processor

CoddyのDartジャーニー「論理とフロー」セクションの一部。レッスン 50/65。

challenge icon

チャレンジ

簡単

カスタマイズ可能なリストプロセッサを作成して、高階関数を活用した柔軟なデータ処理システムを実装しましょう。プログラムではさまざまな処理関数を作成し、データのリストに任意の演算を適用できるメインのプロセッサ関数を使用します。

  1. カンマ区切りの数値を含む文字列入力を読み取ります(例:"10,20,30,40")
  2. 最初の演算の種類を表す文字列入力を読み取ります("multiply"、"add"、または "subtract")
  3. 最初の演算で使用する値を表す文字列入力を読み取ります(例:"3")
  4. 2番目の演算の種類を表す文字列入力を読み取ります("multiply"、"add"、または "subtract")
  5. 2番目の演算で使用する値を表す文字列入力を読み取ります(例:"5")
  6. 最初の入力を個々の数値に分割し、それぞれを整数に変換します
  7. 次の3つの演算関数を作成します。
    • multiplyBy - 2つの整数を受け取り、1つ目に2つ目を掛けた値を返します
    • addTo - 2つの整数を受け取り、1つ目に2つ目を足した値を返します
    • subtractFrom - 2つの整数を受け取り、1つ目から2つ目を引いた値を返します
  8. processListWithOperationという名前のメイン関数を作成します。この関数は3つのパラメーターを受け取ります。
    • 整数のリスト
    • 2つの整数を受け取り、整数を返す関数
    • 演算で使用する整数値
  9. processListWithOperation関数は、指定された値を使ってリスト内の各数値に指定された関数を適用し、結果を格納した新しいリストを返します
  10. 元のリストに最初の演算を適用し、その後、最初の演算の結果に2番目の演算を適用します
  11. 以下に示す正確な形式で結果を表示します

たとえば、入力が "2,4,6"、"multiply"、"3"、"add"、"10"の場合、プログラムは次のように出力します。

Advanced List Processor
=======================
Original list: [2, 4, 6]
First operation: multiply by 3
After first operation: [6, 12, 18]
Second operation: add 10
Final result: [16, 22, 28]
Processing completed successfully

入力が "15,25,35"、"subtract"、"5"、"multiply"、"2"の場合、プログラムは次のように出力します。

Advanced List Processor
=======================
Original list: [15, 25, 35]
First operation: subtract 5
After first operation: [10, 20, 30]
Second operation: multiply by 2
Final result: [20, 40, 60]
Processing completed successfully

演算の種類を表す入力に基づいて適切な演算関数をprocessListWithOperationに渡し、高階関数を実演してください。条件文を使って、それぞれの演算に渡す関数を決定します。processListWithOperation関数は入力リストを反復処理し、指定された値とともに指定された関数を各要素に適用して、結果を新しいリストに集めます。演算は順番に適用し、最初の演算の結果を2番目の演算の入力として使用します。

自分で試してみよう

import 'dart:io';

void main() {
  // 入力を読み込む
  String? numbersInput = stdin.readLineSync();
  String? firstOperation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondOperation = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // 文字列の入力を整数のリストに変換する
  List<int> originalList = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
  int firstOpValue = int.parse(firstValue!);
  int secondOpValue = int.parse(secondValue!);
  
  // TODO: 以下にコードを書く
  // 3つの演算関数 multiplyBy、addTo、subtractFrom を作成する
  // processListWithOperation 関数を作成する
  // 演算を順番に適用し、結果を保存する
  
  // 指定された形式で結果を出力する
  print('Advanced List Processor');
  print('=======================');
  print('Original list: $originalList');
  // 最初の演算と結果を出力する
  // 2番目の演算と最終結果を出力する
  print('Processing completed successfully');
}

論理とフローのすべてのレッスン

自分で練習してみよう: Dartオンラインコンパイラ