Xáo trộn 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 8 trên 65.
Khi cần xáo trộn thứ tự các phần tử trong danh sách, Dart cung cấp phương thức shuffle(). Phương thức này sắp xếp lại ngẫu nhiên tất cả phần tử trong danh sách, tạo ra thứ tự khó đoán, rất phù hợp cho trò chơi, mô phỏng hoặc bất kỳ tình huống nào cần sắp xếp ngẫu nhiên.
Phương thức (method) shuffle() sửa đổi trực tiếp danh sách ban đầu, thay đổi ngẫu nhiên vị trí của tất cả phần tử. Mỗi lần gọi shuffle(), bạn sẽ nhận được một cách sắp xếp khác của cùng các phần tử.
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (thứ tự ngẫu nhiên)Phương thức này đặc biệt hữu ích khi tạo trò chơi bài, xáo trộn câu hỏi trắc nghiệm hoặc xây dựng bất kỳ ứng dụng nào mà bạn muốn trình bày các mục theo thứ tự khó đoán. Vì shuffle() thay đổi trực tiếp danh sách hiện có, bạn không cần tạo danh sách mới. Danh sách hiện có sẽ được sắp xếp lại ngẫu nhiên.
Thử thách
DễTạo chương trình quản lý lịch thi đấu của một giải đấu bằng cách xáo trộn các đội để tạo thành các cặp đấu ngẫu nhiên. Chương trình cần:
- Đọc một đầu vào chuỗi đại diện cho tên giải đấu (đọc giá trị này nhưng không in ra)
- Đọc nhiều đầu vào chuỗi đại diện cho tên các đội (đầu vào kết thúc khi nhận được một chuỗi rỗng)
- Xáo trộn các đội theo thứ tự ngẫu nhiên
- In tên từng đội trên một dòng riêng
Ví dụ: nếu tên giải đấu là "Local Cup" và các đội là "Wolves", "Hawks", chương trình cần in tên các đội theo thứ tự đã xáo trộn (ngẫu nhiên), mỗi đội trên một dòng:
Hawks
WolvesHoặc:
Wolves
HawksVì shuffle() xáo trộn thứ tự ngẫu nhiên, mọi cách sắp xếp các đội đều hợp lệ.
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên giải đấu
String? tournamentName = stdin.readLineSync();
// Đọc tên các đội cho đến khi gặp chuỗi rỗng
List<String> teams = [];
String? teamName;
while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
teams.add(teamName);
}
// TODO: Xáo trộn danh sách các đội để ghép cặp ngẫu nhiên
// In mỗi đội trên một dòng riêng
for (String team in teams) {
print(team);
}
}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