Map에서 항목 삭제하기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 30번째.
Map에서 데이터를 관리할 때, 더 이상 필요하지 않은 항목을 제거해야 할 때가 많습니다. remove() 메서드는 키를 사용하여 맵에서 키-값 쌍을 삭제하는 간단한 방법을 제공합니다.
remove() 메서드는 삭제하려는 엔트리의 키라는 단일 매개변수를 받습니다. 호출되면 맵에서 키와 그에 연결된 값을 모두 제거합니다. 키가 맵에 존재하지 않으면, 메서드는 오류를 발생시키지 않고 아무 작업도 수행하지 않습니다.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// 인벤토리에서 마우스를 제거합니다
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// 존재하지 않는 항목을 제거하려고 해도 아무런 변화가 없습니다
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}이 메서드는 애플리케이션에서 깨끗하고 최신 상태의 맵을 유지하는 데 필수적입니다. 인벤토리, 사용자 데이터 또는 항목을 삭제해야 하는 다른 모든 컬렉션을 관리하든 상관없이, remove()는 키를 통해 항목을 삭제하는 안전하고 효율적인 방법을 제공합니다.
챌린지
쉬움곡 라이브러리를 추적하고 라이선스 문제로 인해 더 이상 사용할 수 없는 곡을 제거하여 디지털 음악 스트리밍 서비스를 관리하는 프로그램을 작성하세요. 프로그램의 기능은 다음과 같습니다:
- 스트리밍 서비스 이름을 나타내는 문자열 입력을 읽습니다.
- 곡 제목과 스트리밍 횟수를 나타내는 여러 쌍의 입력을 읽습니다 (입력은
"library_done"을 받으면 종료됩니다). - 라이선스 문제로 제거할 곡들을 나타내는 여러 문자열 입력을 읽습니다 (입력은
"removal_done"을 받으면 종료됩니다). - 곡 제목을 키(key)로, 스트리밍 횟수를 값(value)으로 저장하는 Map을 생성합니다.
remove()메서드를 사용하여 라이브러리에서 지정된 각 곡을 제거합니다.- 라이브러리 통계를 계산하고 아래에 표시된 정확한 형식으로 제거 보고서를 출력합니다.
예를 들어, 서비스 이름이 "MusicStream Pro"이고, 라이브러리에 2500000회 스트리밍된 "Bohemian Rhapsody", 1800000회 스트리밍된 "Imagine", 2200000회 스트리밍된 "Hotel California", 1900000회 스트리밍된 "Stairway to Heaven"이 포함되어 있으며, 제거할 곡이 "Imagine", "Yesterday", "Hotel California"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Service: MusicStream Pro
Original Library: {Bohemian Rhapsody: 2500000, Imagine: 1800000, Hotel California: 2200000, Stairway to Heaven: 1900000}
Removal Process:
Removing 'Imagine': Song removed (had 1800000 streams)
Removing 'Yesterday': Song not found in library
Removing 'Hotel California': Song removed (had 2200000 streams)
Updated Library: {Bohemian Rhapsody: 2500000, Stairway to Heaven: 1900000}
Library Statistics:
Songs before removal: 4
Songs after removal: 2
Songs successfully removed: 2
Songs not found: 1
Total streams lost: 4000000
Remaining total streams: 4400000
Status: Library update completed서비스 이름이 "SoundWave"이고, 라이브러리에 3200000회 스트리밍된 "Shape of You", 2800000회 스트리밍된 "Blinding Lights", 2100000회 스트리밍된 "Someone Like You"가 포함되어 있으며, 제거할 곡이 "Blinding Lights", "Perfect"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Service: SoundWave
Original Library: {Shape of You: 3200000, Blinding Lights: 2800000, Someone Like You: 2100000}
Removal Process:
Removing 'Blinding Lights': Song removed (had 2800000 streams)
Removing 'Perfect': Song not found in library
Updated Library: {Shape of You: 3200000, Someone Like You: 2100000}
Library Statistics:
Songs before removal: 3
Songs after removal: 2
Songs successfully removed: 1
Songs not found: 1
Total streams lost: 2800000
Remaining total streams: 5300000
Status: Library update completed서비스 이름이 "AudioHub"이고, 라이브러리에 1500000회 스트리밍된 "Bad Guy", 1700000회 스트리밍된 "Watermelon Sugar", 1400000회 스트리밍된 "Levitating", 1600000회 스트리밍된 "Good 4 U"가 포함되어 있으며, 제거할 곡이 "Bad Guy", "Levitating", "Good 4 U", "Drivers License"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Service: AudioHub
Original Library: {Bad Guy: 1500000, Watermelon Sugar: 1700000, Levitating: 1400000, Good 4 U: 1600000}
Removal Process:
Removing 'Bad Guy': Song removed (had 1500000 streams)
Removing 'Levitating': Song removed (had 1400000 streams)
Removing 'Good 4 U': Song removed (had 1600000 streams)
Removing 'Drivers License': Song not found in library
Updated Library: {Watermelon Sugar: 1700000}
Library Statistics:
Songs before removal: 4
Songs after removal: 1
Songs successfully removed: 3
Songs not found: 1
Total streams lost: 4500000
Remaining total streams: 1700000
Status: Library update completed프로그램은 반드시 remove() 메서드를 사용하여 Map에서 곡을 삭제해야 합니다. 어떤 곡이 성공적으로 제거되었고 어떤 곡을 찾지 못했는지 추적하세요. 성공적으로 제거된 곡들의 스트리밍 횟수를 합산하여 손실된 총 스트리밍 횟수를 계산합니다. 입력 형식은 서비스 이름, 그 다음 곡 제목과 스트리밍 횟수(정수로 변환해야 하는 문자열)가 번갈아 나오며 "library_done"으로 종료되고, 이어서 제거할 곡 제목들이 나오며 "removal_done"으로 종료됩니다.
치트 시트
remove() 메서드는 키를 사용하여 Map에서 키-값 쌍을 삭제합니다:
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// 키를 사용하여 항목 제거
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// 존재하지 않는 키를 제거해도 아무런 변화가 없습니다
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}이 메서드는 오류를 발생시키지 않고 존재하지 않는 키를 안전하게 처리합니다.
직접 해보기
import 'dart:io';
void main() {
// 서비스 이름 읽기
String? serviceName = stdin.readLineSync();
// 곡 제목과 스트리밍 횟수를 저장할 Map 생성
Map<String, int> songLibrary = {};
// 곡 라이브러리 데이터 읽기
while (true) {
String? input = stdin.readLineSync();
if (input == "library_done") break;
String songTitle = input!;
String? streamCountStr = stdin.readLineSync();
int streamCount = int.parse(streamCountStr!);
songLibrary[songTitle] = streamCount;
}
// 삭제할 곡 목록 읽기
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: 아래에 코드를 작성하세요
// remove() 메서드를 사용하여 곡 삭제 프로세스 처리
// 통계 추적 및 요구되는 출력 형식 생성
// 요구되는 형식으로 결과 출력
// 포함할 내용: 서비스 이름, 원본 라이브러리, 삭제 프로세스,
// 업데이트된 라이브러리 및 라이브러리 통계
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구4고급 Map 조작
Map 순회하기키와 값 확인하기Map 속성: keys 및 values조건부 추가: putIfAbsentMap에서 항목 삭제하기중첩된 Map복습 - 인벤토리 업데이트