Menu
CoddyTech

在列表中查找: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() 只会查找第一个匹配项,因此,如果某个元素出现多次,你得到的将是它第一次出现的位置索引。

challenge icon

挑战

简单

创建一个程序,通过查找特定书籍在书架上的位置来管理图书馆的图书搜索系统。你的程序应该:

  1. 读取一个字符串输入,表示图书馆单元名称
  2. 读取多个字符串输入,表示书架上的书名(输入为空字符串时结束)
  3. 读取一个字符串输入,表示要搜索的书名
  4. 使用 indexOf() 方法查找要搜索的书的位置
  5. 按照下方所示的准确格式打印搜索结果

例如,如果图书馆单元是 "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() 会返回它第一次出现的位置。

亲手试试

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');
  // 根据查找结果输出位置和状态
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器