Map 속성: keys 및 values
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 28번째.
Map 컬렉션을 다룰 때, 때로는 모든 키나 모든 값을 별도로 추출해야 할 필요가 있습니다. Dart는 이를 위해 두 가지 편리한 속성을 제공합니다: .keys와 .values.
.keys 속성은 맵의 모든 키를 포함하는 이터러블(iterable)을 반환하며, .values는 모든 해당 값을 포함하는 이터러블을 반환합니다. 이러한 속성들은 키와 값을 독립적으로 처리해야 할 때 특히 유용합니다.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
Iterable<String> productNames = inventory.keys;
Iterable<double> prices = inventory.values;
print(productNames); // (Laptop, Mouse, Keyboard)
print(prices); // (999.99, 25.5, 75.0)이러한 속성들은 리스트가 아닌 반복 가능한 객체(iterables)를 반환하므로, 리스트 전용 기능이 필요한 경우 .toList()를 사용하여 리스트로 변환할 수 있습니다. 이러한 키와 값의 분리는 데이터의 한 측면을 다른 측면과 독립적으로 분석하거나 조작해야 할 때 특히 유용합니다.
챌린지
쉬움도서 컬렉션을 분석하고 도서 제목과 출판 연도에 대한 정보를 추출하여 디지털 도서관 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:
- 도서관 이름을 나타내는 문자열 입력을 읽습니다.
- 도서 제목과 출판 연도를 나타내는 여러 쌍의 입력을 읽습니다 (입력은
"catalog_done"을 받으면 종료됩니다). - 각 도서 제목을 키(key)로, 출판 연도를 값(value)으로 저장하는 Map을 생성합니다.
.keys속성을 사용하여 모든 도서 제목을 추출하고 이를 List로 변환합니다..values속성을 사용하여 모든 출판 연도를 추출하고 이를 List로 변환합니다.- 값들 중에서 최소 연도를 식별하여 가장 오래된 도서를 찾습니다.
- 값들 중에서 최대 연도를 식별하여 가장 최신 도서를 찾습니다.
- 아래에 표시된 정확한 형식으로 도서관 분석 내용을 출력합니다.
예를 들어, 도서관 이름이 "Central Library"이고 카탈로그에 "To Kill a Mockingbird" (1960년), "1984" (1949년), "The Great Gatsby" (1925년), "Harry Potter" (1997년)가 포함되어 있다면, 프로그램은 다음과 같이 출력해야 합니다:
Library: Central Library
Book Collection Analysis:
All book titles: [To Kill a Mockingbird, 1984, The Great Gatsby, Harry Potter]
All publication years: [1960, 1949, 1925, 1997]
Total books in collection: 4
Oldest book year: 1925
Newest book year: 1997
Collection span: 72 years
Status: Library catalog analysis completed도서관 이름이 "University Library"이고 카탈로그에 "Pride and Prejudice" (1813년), "Moby Dick" (1851년), "Brave New World" (1932년)가 포함되어 있다면, 프로그램은 다음과 같이 출력해야 합니다:
Library: University Library
Book Collection Analysis:
All book titles: [Pride and Prejudice, Moby Dick, Brave New World]
All publication years: [1813, 1851, 1932]
Total books in collection: 3
Oldest book year: 1813
Newest book year: 1932
Collection span: 119 years
Status: Library catalog analysis completed도서관 이름이 "Community Library"이고 카탈로그에 "The Hobbit" (1937년), "Dune" (1965년), "Neuromancer" (1984년), "The Martian" (2011년), "Klara and the Sun" (2021년)이 포함되어 있다면, 프로그램은 다음과 같이 출력해야 합니다:
Library: Community Library
Book Collection Analysis:
All book titles: [The Hobbit, Dune, Neuromancer, The Martian, Klara and the Sun]
All publication years: [1937, 1965, 1984, 2011, 2021]
Total books in collection: 5
Oldest book year: 1937
Newest book year: 2021
Collection span: 84 years
Status: Library catalog analysis completed프로그램은 반드시 .keys 속성을 사용하여 모든 도서 제목을 추출하고, .values 속성을 사용하여 모든 출판 연도를 추출해야 합니다. 두 반복 가능한 객체(iterables)는 .toList()를 사용하여 List로 변환하세요. 컬렉션 기간(collection span)은 가장 최신 연도에서 가장 오래된 연도를 빼서 계산합니다. 입력 형식은 도서관 이름, 그 다음 도서 제목과 출판 연도(정수로 변환해야 하는 문자열)가 번갈아 나타나며, "catalog_done"으로 끝납니다.
치트 시트
Map에서 모든 키를 추출하려면 .keys를 사용하고, 모든 값을 추출하려면 .values를 사용하세요:
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
Iterable<String> productNames = inventory.keys;
Iterable<double> prices = inventory.values;
print(productNames); // (Laptop, Mouse, Keyboard)
print(prices); // (999.99, 25.5, 75.0)리스트 전용 기능을 사용하려면 .toList()를 사용하여 이터러블(iterable)을 리스트로 변환하세요:
List<String> namesList = inventory.keys.toList();
List<double> pricesList = inventory.values.toList();직접 해보기
import 'dart:io';
void main() {
// 도서관 이름을 읽습니다
String? libraryName = stdin.readLineSync();
// 도서 제목과 출판 연도를 저장할 Map을 생성합니다
Map<String, int> bookCatalog = {};
// "catalog_done"이 입력될 때까지 도서 제목과 연도를 읽습니다
while (true) {
String? input = stdin.readLineSync();
if (input == "catalog_done") {
break;
}
String bookTitle = input!;
String? yearInput = stdin.readLineSync();
int publicationYear = int.parse(yearInput!);
bookCatalog[bookTitle] = publicationYear;
}
// TODO: 아래에 코드를 작성하세요
// .keys 속성을 사용하여 도서 제목을 추출하고 List로 변환합니다
// .values 속성을 사용하여 출판 연도를 추출하고 List로 변환합니다
// 가장 오래된 연도와 가장 최근 연도를 찾습니다
// 소장 도서의 기간 범위를 계산합니다
// 요구된 형식으로 도서관 분석 내용을 출력합니다
print("Library: $libraryName");
print("Book Collection Analysis:");
// 여기에 출력 문을 추가하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구4고급 Map 조작
Map 순회하기키와 값 확인하기Map 속성: keys 및 values조건부 추가: putIfAbsentMap에서 항목 삭제하기중첩된 Map복습 - 인벤토리 업데이트