Menu
CoddyTech

Tìm trong danh sách: indexOf

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 6 trên 65.

Khi cần tìm vị trí của một phần tử cụ thể trong danh sách, Dart cung cấp phương thức indexOf(). Phương thức này tìm trong danh sách và trả về chỉ số của lần xuất hiện đầu tiên của phần tử bạn cần tìm.

Phương thức indexOf() nhận phần tử bạn muốn tìm làm tham số và trả về một số nguyên. Nếu phần tử có trong danh sách, phương thức trả về vị trí chỉ số, bắt đầu từ 0. Nếu không tìm thấy phần tử, phương thức trả về -1.

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (lần xuất hiện đầu tiên)
int grapeIndex = fruits.indexOf('grape');    // -1 (không tìm thấy)

Phương thức này đặc biệt hữu ích khi bạn cần biết vị trí của một phần tử trước khi thực hiện các thao tác như chèn hoặc xóa tại vị trí cụ thể. Hãy nhớ rằng indexOf() chỉ tìm kết quả khớp đầu tiên, vì vậy nếu một phần tử xuất hiện nhiều lần, bạn sẽ nhận được chỉ số của lần xuất hiện đầu tiên.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống tìm sách trong thư viện bằng cách xác định vị trí của những cuốn sách cụ thể trên kệ. Chương trình của bạn cần:

  1. Đọc một chuỗi đầu vào biểu thị tên phần của thư viện
  2. Đọc nhiều chuỗi đầu vào biểu thị tên sách trên kệ. Đầu vào kết thúc khi bạn nhận được một chuỗi rỗng
  3. Đọc một chuỗi đầu vào biểu thị tên cuốn sách cần tìm
  4. Dùng phương thức indexOf() để tìm vị trí của cuốn sách cần tìm
  5. In kết quả tìm kiếm theo đúng định dạng bên dưới

Ví dụ, nếu phần của thư viện là "Science Fiction", các cuốn sách là "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game", và cuốn sách cần tìm là "Foundation", chương trình của bạn sẽ in ra:

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

Nếu phần của thư viện là "Mystery", các cuốn sách là "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon", và cuốn sách cần tìm là "Gone Girl", chương trình của bạn sẽ in ra:

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

Chương trình của bạn phải dùng phương thức indexOf() để tìm sách. Khi tìm thấy sách (position >= 0), hãy hiển thị "Book located successfully". Khi không tìm thấy sách (position = -1), hãy hiển thị "Book not available". Hãy nhớ rằng indexOf() trả về vị trí của lần xuất hiện đầu tiên nếu sách xuất hiện nhiều lần.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc tên khu vực thư viện
  String? section = stdin.readLineSync();
  
  // Đọc tên sách cho đến khi gặp chuỗi (string) rỗng
  List<String> books = [];
  String? book;
  while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
    books.add(book);
  }
  
  // Đọc tên sách cần tìm
  String? searchBook = stdin.readLineSync();
  
  // TODO: Viết code của bạn bên dưới
  // Dùng phương thức (method) indexOf() để tìm vị trí của sách
  
  // In kết quả theo định dạng yêu cầu
  print('Library Section: $section');
  print('Books on shelf: $books');
  print('Searching for: $searchBook');
  // In vị trí và trạng thái dựa trên kết quả tìm kiếm
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online