Menu
Coddy logo textTech

リストへの追加: insert

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

リストの特定の場所に要素を追加する必要がある場合、insert() メソッドを使用すると、新しい要素をどこに配置するかを正確に制御できます。リストの最後に常に要素を追加する add() メソッドとは異なり、insert() を使用すると、選択した任意の場所に要素を配置できます。

insert() メソッドは、要素を挿入したいインデックス位置と、その要素自体の2つのパラメータを取ります。要素を挿入すると、その位置およびそれ以降にある既存のすべての要素が右に1つずつずれます。

List<String> tasks = ['Buy groceries', 'Walk the dog', 'Read a book'];

// 最初に新しいタスクを挿入(インデックス 0)
tasks.insert(0, 'Check emails');

print(tasks);  // ['Check emails', 'Buy groceries', 'Walk the dog', 'Read a book']

このメソッドは、優先順位リストやスケジュール、あるいは特定の順序を維持する必要があるあらゆる状況など、要素の順序が重要な場合に特に便利です。任意の位置に挿入できる機能により、insert() は順序付けられたコレクションを管理するための強力なツールになります。

challenge icon

チャレンジ

簡単

既存のタスクリストの特定の位置に緊急タスクを挿入することで、優先タスクシステムを管理するプログラムを作成してください。プログラムは以下の手順を実行する必要があります:

  1. タスクリスト名を表す文字列入力を読み込む
  2. 既存のタスクを表す複数の文字列入力を読み込む(空の文字列を受け取った時点で入力は終了します)
  3. 挿入する緊急タスクを表す文字列入力を読み込む
  4. 緊急タスクを挿入する位置を表す整数入力を読み込む
  5. insert() メソッドを使用して、指定された位置に緊急タスクを追加する
  6. 更新されたタスクリストを、以下に示す正確な形式で出力する

例えば、タスクリスト名が "Work Schedule"、既存のタスクが "Review documents""Team meeting""Submit report" で、緊急タスクが "Client call"、位置が 1 の場合、プログラムは以下のように出力する必要があります:

Task List: Work Schedule
Original tasks: [Review documents, Team meeting, Submit report]
Inserted: Client call at position 1
Updated tasks: [Review documents, Client call, Team meeting, Submit report]
Total tasks: 4

もしタスクリスト名が "Daily Goals"、既存のタスクが "Exercise""Read book" で、緊急タスクが "Buy groceries"、位置が 0 の場合、プログラムは以下のように出力する必要があります:

Task List: Daily Goals
Original tasks: [Exercise, Read book]
Inserted: Buy groceries at position 0
Updated tasks: [Buy groceries, Exercise, Read book]
Total tasks: 3

プログラムでは、必ず insert() メソッドを使用して、指定された位置に緊急タスクを追加してください。位置の入力は常に有効なインデックス(0から既存のタスクリストの長さの間)となります。

チートシート

insert() メソッドを使用すると、リスト内の特定の位置に要素を追加できます。このメソッドは、インデックス位置と挿入する要素の 2 つのパラメータを取ります。

List<String> tasks = ['Buy groceries', 'Walk the dog', 'Read a book'];

// インデックス 0 (先頭) に挿入
tasks.insert(0, 'Check emails');

print(tasks);  // ['Check emails', 'Buy groceries', 'Walk the dog', 'Read a book']

要素を挿入すると、その位置以降にある既存のすべての要素が右に 1 つずつずれます。このメソッドは、位置が重要となる順序付けられたコレクションを維持するのに役立ちます。

自分で試してみよう

import 'dart:io';

void main() {
  // タスクリスト名を読み込む
  String? taskListName = stdin.readLineSync();
  
  // 空の文字列が入力されるまで既存のタスクを読み込む
  List<String> tasks = [];
  while (true) {
    String? task = stdin.readLineSync();
    if (task == null || task.isEmpty) {
      break;
    }
    tasks.add(task);
  }
  
  // 緊急タスクと挿入位置を読み込む
  String? urgentTask = stdin.readLineSync();
  int position = int.parse(stdin.readLineSync()!);
  
  // TODO: 以下にコードを記述してください
  // insert() メソッドを使用して、指定された位置に緊急タスクを追加します
  
  // 必要な形式で結果を出力します
  print('Task List: $taskListName');
  print('Original tasks: $tasks');
  print('Inserted: $urgentTask at position $position');
  // 更新されたタスクと総数を出力します
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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