Menu
Coddy logo textTech

중첩된 해시

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 35번째.

해시 값 자체가 해시가 될 수 있습니다. 이러한 중첩된 형태는 Ruby 코드가 일반적으로 구조화된 레코드를 표현하는 방식이며, id(또는 이름)를 키로 하는 단일 해시에서 각 값은 고유한 필드를 가집니다:

students = {
  "Alice" => { age: 20, grade: "A" },
  "Bob"   => { age: 22, grade: "B" }
}

중첩된 값에 접근하려면 조회를 연결(chain)하세요:

puts students["Alice"][:age]    # 20
puts students["Bob"][:grade]    # B

내부 해시 중 하나에 새로운 필드를 추가하는 것도 같은 방식으로 작동합니다:

students["Alice"][:major] = "Math"
puts students["Alice"]
# {age: 20, grade: "A", major: "Math"}

어느 단계에서든 키가 누락될 수 있는 중첩된 해시(hash)에서 안전하게 값을 읽기 위해, dig는 체인을 따라 탐색하며 도중에 누락된 것이 있으면 nil을 반환합니다:

students.dig("Alice", :grade)   # "A"
students.dig("Cara",  :grade)   # nil
challenge icon

챌린지

중급

중첩된 inventory 해시가 주어집니다: 각 최상위 키는 부서(department)이고, 각 내부 키는 품목(item)이며, 각 내부 값은 재고 수량(정수)입니다.

한 줄의 입력을 읽으십시오: 쉼표로 구분된 department/item 조회 경로 목록입니다.

각 경로에 대해 순서대로 dig를 사용하여 해당 경로를 확인합니다. 다음 중 하나를 출력하십시오:

  • 경로가 존재하는 경우 <department>/<item>: <qty>
  • dignil을 반환하는 경우 <department>/<item>: missing

모든 라인을 출력한 후, 하나의 요약 라인도 출력하십시오:

Total inventory: <sum>

합계는 원래 해시에 있는 모든 부서의 모든 수량의 합입니다. 중첩 반복문(각 부서 순회 후 각 품목 순회)을 사용하십시오.

입력이 fruits/apples,meat/beef,fruits/dragonfruit,dairy/milk인 경우, 출력은 다음과 같습니다:

fruits/apples: 12
meat/beef: 7
fruits/dragonfruit: missing
dairy/milk: 9
Total inventory: 39

치트 시트

중첩된 해시(Nested hashes)는 다른 해시 내부에 해시를 값으로 저장합니다:

students = {
  "Alice" => { age: 20, grade: "A" },
  "Bob"   => { age: 22, grade: "B" }
}

중첩된 값에 접근하려면 조회를 체이닝(Chain)하세요:

students["Alice"][:age]    # 20

중첩된 필드를 추가하거나 업데이트하려면 할당을 사용하세요:

students["Alice"][:major] = "Math"

중첩된 키를 안전하게 탐색하려면 dig를 사용하세요. 키가 하나라도 누락되면 nil을 반환합니다:

students.dig("Alice", :grade)   # "A"
students.dig("Cara",  :grade)   # nil

직접 해보기

inventory = {
  fruits: { apples: 12, bananas: 4 },
  meat:   { beef: 7, chicken: 5 },
  dairy:  { milk: 9, cheese: 2 }
}
lookups = gets.chomp.split(",")

# TODO: 각 조회 항목에 대해, 수량을 찾아 출력하거나 'missing'을 출력하세요.
#       그 다음 모든 항목에 대한 'Total inventory: <sum>'을 출력하세요.
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨