Menu
CoddyTech

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.

challenge icon

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:

  1. Đọ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)
  2. Đọ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)
  3. Xáo trộn các đội theo thứ tự ngẫu nhiên
  4. 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
Wolves

Hoặc:

Wolves
Hawks

Vì 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);
  }
}
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