Menu
Coddy logo textTech

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()를 사용하여 리스트로 변환할 수 있습니다. 이러한 키와 값의 분리는 데이터의 한 측면을 다른 측면과 독립적으로 분석하거나 조작해야 할 때 특히 유용합니다.

challenge icon

챌린지

쉬움

도서 컬렉션을 분석하고 도서 제목과 출판 연도에 대한 정보를 추출하여 디지털 도서관 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:

  1. 도서관 이름을 나타내는 문자열 입력을 읽습니다.
  2. 도서 제목과 출판 연도를 나타내는 여러 쌍의 입력을 읽습니다 (입력은 "catalog_done"을 받으면 종료됩니다).
  3. 각 도서 제목을 키(key)로, 출판 연도를 값(value)으로 저장하는 Map을 생성합니다.
  4. .keys 속성을 사용하여 모든 도서 제목을 추출하고 이를 List로 변환합니다.
  5. .values 속성을 사용하여 모든 출판 연도를 추출하고 이를 List로 변환합니다.
  6. 값들 중에서 최소 연도를 식별하여 가장 오래된 도서를 찾습니다.
  7. 값들 중에서 최대 연도를 식별하여 가장 최신 도서를 찾습니다.
  8. 아래에 표시된 정확한 형식으로 도서관 분석 내용을 출력합니다.

예를 들어, 도서관 이름이 "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:");
  // 여기에 출력 문을 추가하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨