리스트 섞기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 8번째.
리스트의 요소 순서를 무작위로 섞어야 할 때, 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()은 제자리(in-place)에서 작동하므로 새 리스트를 만들 필요가 없습니다. 기존 리스트가 무작위로 재구성됩니다.
챌린지
쉬움팀을 무작위 대진으로 섞어 게임 토너먼트 대진표를 관리하는 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 토너먼트 이름을 나타내는 문자열 입력을 읽습니다 (이 값은 읽기만 하고 출력하지는 않습니다)
- 팀 이름을 나타내는 여러 문자열 입력을 읽습니다 (빈 문자열이 입력되면 종료됩니다)
- 팀들을 무작위 순서로 섞습니다
- 각 팀 이름을 별도의 줄에 출력합니다
예를 들어, 토너먼트 이름이 "Local Cup"이고 팀이 "Wolves", "Hawks"인 경우, 프로그램은 팀 이름을 무작위로 섞인 순서대로 한 줄에 하나씩 출력해야 합니다:
Hawks
Wolves또는:
Wolves
Hawksshuffle()은 순서를 무작위로 정하므로, 팀의 어떤 배열이든 유효합니다.
치트 시트
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리스트 정렬리스트 섞기요약 - 리스트 정리 도구