Embaralhando uma Lista
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 8 de 65.
Quando você precisa randomizar a ordem dos elementos em uma lista, o Dart fornece o método shuffle(). Este método rearranja todos os elementos na lista aleatoriamente, criando uma ordem imprevisível que é perfeita para jogos, simulações ou qualquer situação onde você precise de arranjos aleatórios.
O método shuffle() modifica a lista original diretamente, alterando as posições de todos os elementos aleatoriamente. Cada vez que você chama shuffle(), você obterá uma disposição diferente dos mesmos elementos.
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (ordem aleatória)Este método é particularmente útil para criar jogos de cartas, randomizar perguntas de quiz ou qualquer aplicação onde você queira apresentar itens em uma sequência imprevisível. Como o shuffle() funciona in-place, você não precisa criar uma nova lista - a lista existente é reorganizada aleatoriamente para você.
Desafio
FácilCrie um programa que gerencie uma chave de torneio de jogos embaralhando as equipes em confrontos aleatórios. Seu programa deve:
- Ler uma entrada de string representando o nome do torneio (este valor é lido, mas não impresso)
- Ler múltiplas entradas de string representando os nomes das equipes (a entrada termina quando uma string vazia é recebida)
- Embaralhar as equipes em uma ordem aleatória
- Imprimir cada nome de equipe em uma linha separada
Por exemplo, se o nome do torneio for "Local Cup" e as equipes forem "Wolves", "Hawks", seu programa deve gerar os nomes das equipes em uma ordem embaralhada (aleatória), um por linha:
Hawks
WolvesOu:
Wolves
HawksComo shuffle() randomiza a ordem, qualquer arranjo das equipes é válido.
Folha de consulta
O método shuffle() randomiza a ordem dos elementos em uma lista:
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (ordem aleatória)O método shuffle() modifica a lista original diretamente e cria um arranjo aleatório diferente cada vez que é chamado.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome do torneio
String? tournamentName = stdin.readLineSync();
// Ler os nomes das equipes até encontrar uma string vazia
List<String> teams = [];
String? teamName;
while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
teams.add(teamName);
}
// TODO: Embaralhar a lista de equipes para confrontos aleatórios
// Imprimir cada equipe em uma linha separada
for (String team in teams) {
print(team);
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos