리스트를 세트로 변환하기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 21번째.
Set의 가장 실용적인 응용 사례 중 하나는 List에서 중복된 요소를 제거하는 것입니다. 집합(Set)은 자동으로 중복을 제거하므로, 중복된 값을 가진 리스트를 고유한 요소들의 컬렉션으로 쉽게 변환할 수 있습니다.
List를 Set으로 변환하려면, 단순히 리스트를 Set.from() 생성자에 전달하면 됩니다. 이렇게 하면 원래 리스트의 모든 고유한 요소를 포함하는 새로운 세트가 생성됩니다.
List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers); // {1, 2, 3, 4, 5}만약 결과를 List로 다시 돌려받아야 한다면 (아마도 코드의 다른 부분과의 호환성을 유지하기 위해), toList()를 사용하여 세트를 다시 리스트로 변환할 수 있습니다. 이렇게 하면 원본에서 고유한 요소들만 포함된 리스트를 얻을 수 있습니다.
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]이 List → Set → List 패턴은 추가 처리를 위해 리스트 구조를 유지하면서 중복을 제거하여 데이터를 정리해야 할 때 매우 흔히 사용됩니다.
챌린지
쉬움설문 조사 응답에서 중복 항목을 제거하여 데이터 클리닝 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:
- 설문 조사 제목을 나타내는 문자열 입력을 읽습니다.
- 설문 조사 응답을 나타내는 여러 문자열 입력을 읽습니다 (입력은
"responses_done"을 받으면 종료됩니다). - 중복을 포함한 모든 원본 응답을 저장할 List를 생성합니다.
Set.from()을 사용하여 List를 Set으로 변환하여 자동으로 중복을 제거합니다.toList()를 사용하여 Set을 다시 고유한 응답들로 구성된 List로 변환합니다.- 데이터 클리닝 결과를 아래에 표시된 정확한 형식으로 출력합니다.
예를 들어, 설문 조사 제목이 "Customer Satisfaction Survey"이고 응답이 "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfully설문 조사 제목이 "Product Feedback"이고 응답이 "Like", "Dislike", "Like", "Like"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfully설문 조사 제목이 "Event Rating"이고 응답이 "Amazing", "Okay", "Great"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfully프로그램은 List → Set → List 패턴을 완벽하게 보여주어야 합니다. 먼저 모든 응답을 List에 저장한 다음, Set.from()을 사용하여 List로부터 Set을 생성하고, 마지막으로 toList()를 사용하여 Set을 다시 List로 변환합니다. 제거된 중복 항목의 수는 원래 총 개수에서 최종 고유 개수를 빼서 계산하세요.
치트 시트
List에서 중복을 제거하려면, Set.from()을 사용하여 Set으로 변환하세요:
List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers); // {1, 2, 3, 4, 5}Set을 다시 List로 변환하려면 toList()를 사용하세요:
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]List → Set → List 패턴은 리스트 구조를 유지하면서 데이터를 정제하는 데 흔히 사용됩니다.
직접 해보기
import 'dart:io';
void main() {
// 설문 조사 제목 읽기
String? surveyTitle = stdin.readLineSync();
// "responses_done"이 입력될 때까지 설문 응답 읽기
List<String> originalResponses = [];
String? response;
while ((response = stdin.readLineSync()) != "responses_done") {
if (response != null) {
originalResponses.add(response);
}
}
// TODO: 아래에 코드를 작성하세요
// 1. Set.from()을 사용하여 리스트를 Set으로 변환 (중복 제거)
// 2. toList()를 사용하여 Set을 다시 리스트로 변환
// 3. 제거된 중복 항목 수와 최종 개수 계산
// 결과를 요구된 형식으로 출력
print("Survey: $surveyTitle");
print("Original responses: $originalResponses");
// 여기에 나머지 출력문을 추가하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구