Перемешивание списка
Часть раздела Логика и управление потоком путешествия по 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() работает на месте, вам не нужно создавать новый список — существующий список случайным образом реорганизуется для вас.
Задание
ЛегкоСоздайте программу, которая управляет турнирной сеткой игры, перемешивая команды для случайных матчей. Ваша программа должна:
- Прочитать строковый ввод, представляющий название турнира (это значение считывается, но не выводится на печать)
- Прочитать несколько строковых вводов, представляющих названия команд (ввод заканчивается, когда получена пустая строка)
- Перемешать команды в случайном порядке
- Вывести название каждой команды на отдельной строке
Например, если название турнира — "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);
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей