Menu
Coddy logo textTech

Перемешивание списка

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 8 из 65.

Когда вам нужно случайным образом изменить порядок элементов в списке, Dart предоставляет метод shuffle(). Этот метод переставляет все элементы в списке случайным образом, создавая непредсказуемый порядок, который идеально подходит для игр, симуляций или любых ситуаций, где требуются случайные последовательности.

Метод shuffle() изменяет исходный список напрямую, случайным образом меняя позиции всех элементов. При каждом вызове shuffle() вы будете получать новую расстановку тех же самых элементов.

List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards');  // [Ace, King, Queen, Jack]

cards.shuffle();
print('Shuffled: $cards');  // [Queen, Ace, Jack, King] (случайный порядок)

Этот метод особенно полезен для создания карточных игр, перемешивания вопросов викторины или любого приложения, где вы хотите представить элементы в непредсказуемой последовательности. Поскольку shuffle() работает на месте, вам не нужно создавать новый список — существующий список случайным образом реорганизуется для вас.

challenge icon

Задание

Легко

Создайте программу, которая управляет турнирной сеткой игры, перемешивая команды для случайных матчей. Ваша программа должна:

  1. Прочитать строковый ввод, представляющий название турнира (это значение считывается, но не выводится на печать)
  2. Прочитать несколько строковых вводов, представляющих названия команд (ввод заканчивается, когда получена пустая строка)
  3. Перемешать команды в случайном порядке
  4. Вывести название каждой команды на отдельной строке

Например, если название турнира — "Local Cup", а команды — "Wolves", "Hawks", ваша программа должна вывести названия команд в перемешанном (случайном) порядке, по одному на строку:

Hawks
Wolves

Или:

Wolves
Hawks

Поскольку shuffle() рандомизирует порядок, любая расстановка команд является допустимой.

Шпаргалка

Метод shuffle() переупорядочивает элементы списка в случайном порядке:

List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards');  // [Ace, King, Queen, Jack]

cards.shuffle();
print('Shuffled: $cards');  // [Queen, Ace, Jack, King] (случайный порядок)

Метод shuffle() изменяет исходный список напрямую и создает различное случайное расположение при каждом вызове.

Попробуйте сами

import 'dart:io';

void main() {
  // Прочитать название турнира
  String? tournamentName = stdin.readLineSync();
  
  // Читать названия команд до пустой строки
  List<String> teams = [];
  String? teamName;
  while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
    teams.add(teamName);
  }
  
  // TODO: Перемешать список команд для случайных матчей

  // Вывести каждую команду на отдельной строке
  for (String team in teams) {
    print(team);
  }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком