リスト内の検索: indexOf
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 6/65。
リスト内の特定の要素がどこにあるかを見つける必要があるとき、Dartは indexOf() メソッドを提供しています。このメソッドはリスト内を検索し、探している要素が最初に出現するインデックス位置を返します。
indexOf()メソッドは、検索したい要素を引数として受け取り、整数を返します。要素がリスト内に存在する場合、そのインデックス番号(0から開始)を返します。要素が見つからない場合は、-1を返します。
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (最初に出現する位置)
int grapeIndex = fruits.indexOf('grape'); // -1 (見つからない場合)このメソッドは、特定の場所での挿入や削除などの操作を行う前に、項目の位置を知る必要がある場合に特に便利です。indexOf() は最初の一致のみを検索するため、要素が複数回現れる場合は、最初に出現したインデックスが返されることに注意してください。
チャレンジ
簡単棚にある特定の本の場所を見つけることで、図書館の本の検索システムを管理するプログラムを作成してください。プログラムは以下の手順で行う必要があります:
- 図書館のセクション名を表す文字列入力を読み込む
- 棚にある本のタイトルを表す複数の文字列入力を読み込む(空の文字列を受け取った時点で入力は終了します)
- 検索する本のタイトルを表す文字列入力を読み込む
indexOf()メソッドを使用して、要求された本の位置を見つける- 以下の形式で検索結果を出力する
例えば、図書館のセクションが "Science Fiction" で、本が "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game" であり、検索する本が "Foundation" の場合、プログラムは以下のように出力する必要があります:
Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfullyもし図書館のセクションが "Mystery" で、本が "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon" であり、検索する本が "Gone Girl" の場合、プログラムは以下のように出力する必要があります:
Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not availableプログラムでは必ず indexOf() メソッドを使用して本を検索してください。本が見つかった場合(position >= 0)、"Book located successfully" と表示します。本が見つからない場合(position = -1)、"Book not available" と表示します。indexOf() は、本が複数回現れる場合に最初の出現位置を返すことに注意してください。
チートシート
リスト内の要素の位置を見つけるには、indexOf() を使用します:
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (最初に出現する位置)
int grapeIndex = fruits.indexOf('grape'); // -1 (見つからない場合)このメソッドは、要素が見つかった場合はそのインデックス番号(0から開始)を返し、要素が存在しない場合は -1 を返します。重複する要素がある場合は、最初に出現する位置のみを返します。
自分で試してみよう
import 'dart:io';
void main() {
// 図書館のセクション名を読み込む
String? section = stdin.readLineSync();
// 空の文字列が入力されるまで本のタイトルを読み込む
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// 検索する本を読み込む
String? searchBook = stdin.readLineSync();
// TODO: 以下にコードを記述してください
// indexOf() メソッドを使用して本の位置を見つける
// 必要な形式で結果を出力する
print('Library Section: $section');
print('Books on shelf: $books');
print('Searching for: $searchBook');
// 検索結果に基づいて位置とステータスを出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー