Mieszanie elementów listy
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 8 z 65.
Gdy chcesz losowo zmienić kolejność elementów na liście, Dart udostępnia metodę shuffle(). Ta metoda losowo przestawia wszystkie elementy na liście, tworząc nieprzewidywalną kolejność, idealną do gier, symulacji lub każdej sytuacji, w której potrzebujesz losowego ułożenia elementów.
Metoda shuffle() modyfikuje bezpośrednio oryginalną listę, losowo zmieniając pozycje wszystkich elementów. Za każdym razem, gdy wywołasz shuffle(), otrzymasz inne rozmieszczenie tych samych elementów.
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (losowa kolejność)Ta metoda jest szczególnie przydatna do tworzenia gier karcianych, losowego dobierania pytań quizowych lub w każdej aplikacji, w której chcesz prezentować elementy w nieprzewidywalnej kolejności. Ponieważ shuffle() działa w miejscu, nie musisz tworzyć nowej listy — istniejąca lista zostanie losowo uporządkowana.
Wyzwanie
ŁatwyUtwórz program, który zarządza drabinką turniejową, losowo mieszając drużyny w pary meczowe. Twój program powinien:
- Wczytać ciąg znaków reprezentujący nazwę turnieju (ta wartość jest wczytywana, ale nie jest wyświetlana)
- Wczytać wiele ciągów znaków reprezentujących nazwy drużyn (wczytywanie kończy się po otrzymaniu pustego ciągu znaków)
- Losowo przetasować drużyny
- Wyświetlić nazwę każdej drużyny w osobnym wierszu
Na przykład, jeśli nazwa turnieju to "Local Cup", a drużyny to "Wolves", "Hawks", Twój program powinien wyświetlić nazwy drużyn w losowej kolejności, po jednej w każdym wierszu:
Hawks
WolvesLub:
Wolves
HawksPonieważ shuffle() losowo zmienia kolejność, dowolne ustawienie drużyn jest prawidłowe.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę turnieju
String? tournamentName = stdin.readLineSync();
// Wczytuj nazwy drużyn aż do napotkania pustego ciągu znaków
List<String> teams = [];
String? teamName;
while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
teams.add(teamName);
}
// TODO: Przetasuj listę teams, aby losowo dobrać przeciwników
// Wypisz każdą drużynę w osobnym wierszu
for (String team in teams) {
print(team);
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online