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.
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:
- Đọc một chuỗi đầu vào biểu thị tên phần của thư viện
- Đọ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
- Đọc một chuỗi đầu vào biểu thị tên cuốn sách cần tìm
- Dùng phương thức
indexOf()để tìm vị trí của cuốn sách cần tìm - 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 successfullyNế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 availableChươ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
}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
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online