Menu
CoddyTech

リストへの追加: 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から既存のタスクリストの長さまで)になります。

自分で試してみよう

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()!);
  
  // 挿入前のタスクを保存する
  String originalTasks = tasks.toString();
  
  // TODO: 以下にコードを書く
  // insert()メソッドを使って、指定された位置に緊急タスクを追加する
  
  // 指定された形式で結果を出力する
  print('Task List: $taskListName');
  print('Original tasks: $originalTasks');
  print('Inserted: $urgentTask at position $position');
  // 更新後のタスクと総数を出力する
}
quiz icon腕試し

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

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

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