Sắp xếp danh sách
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 7 trên 65.
Khi cần sắp xếp các phần tử trong danh sách, Dart cung cấp phương thức sort() để sắp xếp các phần tử theo thứ tự tăng dần. Phương thức này đặc biệt hữu ích khi bạn muốn sắp xếp tên theo thứ tự bảng chữ cái hoặc sắp xếp số từ nhỏ nhất đến lớn nhất.
Phương thức sort() sửa đổi trực tiếp danh sách ban đầu thay vì tạo một danh sách mới đã được sắp xếp. Khi gọi sort() trên một danh sách, phương thức này sắp xếp lại các phần tử hiện có ngay tại chỗ.
List<String> names = ['Charlie', 'Alice', 'Bob'];
names.sort();
print(names); // ['Alice', 'Bob', 'Charlie']
List<int> scores = [85, 92, 78, 96];
scores.sort();
print(scores); // [78, 85, 92, 96]Phương thức sort() tự động hoạt động với các kiểu dữ liệu phổ biến như chuỗi và số. Với chuỗi, phương thức này sắp xếp theo thứ tự bảng chữ cái, còn với số, phương thức này sắp xếp từ nhỏ nhất đến lớn nhất. Đây là công cụ đơn giản giúp bạn sắp xếp dữ liệu mỗi khi cần các phần tử theo một thứ tự dễ dự đoán.
Thử thách
DễViết chương trình quản lý thực đơn nhà hàng bằng cách sắp xếp các món ăn theo những danh mục khác nhau. Chương trình cần:
- Đọc một chuỗi đầu vào đại diện cho tên nhà hàng
- Đọc nhiều chuỗi đầu vào đại diện cho tên các món ăn (đầu vào sẽ kết thúc khi bạn nhận được một chuỗi rỗng)
- Dùng phương thức
sort()để sắp xếp các món ăn theo thứ tự bảng chữ cái - In thực đơn đã sắp xếp theo đúng định dạng bên dưới
Ví dụ, nếu tên nhà hàng là "Bella Vista" và các món ăn là "Pasta Carbonara", "Caesar Salad", "Grilled Salmon", "Apple Pie", chương trình của bạn sẽ in ra:
Restaurant: Bella Vista
Original menu: [Pasta Carbonara, Caesar Salad, Grilled Salmon, Apple Pie]
Sorted menu: [Apple Pie, Caesar Salad, Grilled Salmon, Pasta Carbonara]
Total dishes: 4
Status: Menu organized alphabeticallyNếu tên nhà hàng là "Quick Bites" và các món ăn là "Burger", "Pizza", "Sandwich", chương trình của bạn sẽ in ra:
Restaurant: Quick Bites
Original menu: [Burger, Pizza, Sandwich]
Sorted menu: [Burger, Pizza, Sandwich]
Total dishes: 3
Status: Menu organized alphabeticallyNếu tên nhà hàng là "Cafe Corner" và chỉ có một món ăn là "Coffee", chương trình của bạn sẽ in ra:
Restaurant: Cafe Corner
Original menu: [Coffee]
Sorted menu: [Coffee]
Total dishes: 1
Status: Menu organized alphabeticallyChương trình của bạn phải dùng phương thức sort() để sắp xếp các món ăn theo thứ tự bảng chữ cái. Hãy nhớ rằng sort() sửa đổi danh sách ban đầu ngay tại chỗ, vì vậy bạn cần tạo một bản sao của danh sách ban đầu trước khi sắp xếp nếu muốn hiển thị cả phiên bản ban đầu và phiên bản đã sắp xếp.
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên nhà hàng
String? restaurantName = stdin.readLineSync();
// Đọc tên các món ăn cho đến khi gặp chuỗi (string) rỗng
List<String> dishes = [];
String? dish;
while ((dish = stdin.readLineSync()) != null && dish!.isNotEmpty) {
dishes.add(dish);
}
// TODO: Viết code của bạn bên dưới
// Tạo bản sao của danh sách (list) ban đầu rồi sắp xếp bản sao đó
// Tính tổng số món ăn
// In ra đầu ra (output) theo định dạng yêu cầu
// Xuất kết quả
// print("Restaurant: $restaurantName");
// print("Original menu: $dishes");
// print("Sorted menu: $sortedDishes");
// print("Total dishes: $totalDishes");
// print("Status: Menu organized alphabetically");
}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