중첩 Hash
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 35번째.
해시 값 자체가 해시일 수 있습니다. 이 중첩된 구조는 Ruby 코드에서 구조화된 레코드를 나타내는 일반적인 방식으로, id(또는 name)를 키로 사용하는 하나의 해시이며 각 값은 자체 필드를 포함합니다:
students = {
"Alice" => { age: 20, grade: "A" },
"Bob" => { age: 22, grade: "B" }
}중첩된 값에 접근하려면 조회를 연결하세요:
puts students["Alice"][:age] # 20
puts students["Bob"][:grade] # B내부 해시 중 하나에 새 필드를 추가하는 방법도 같습니다:
students["Alice"][:major] = "Math"
puts students["Alice"]
# {age: 20, grade: "A", major: "Math"}어느 단계에서든 키가 없을 수 있는 중첩 해시에서 안전하게 값을 읽으려면 dig가 연결된 경로를 따라가며, 그 과정에서 무언가가 없으면 nil을 반환합니다:
students.dig("Alice", :grade) # "A"
students.dig("Cara", :grade) # nil챌린지
중급중첩된 inventory 해시가 주어집니다. 각 최상위 키는 부서를 나타내고, 각 내부 키는 항목을 나타내며, 각 내부 값은 재고 수량(정수)입니다.
입력에서 한 줄을 읽습니다. 이 줄에는 쉼표로 구분된 department/item 조회 경로 목록이 있습니다.
각 경로에 대해 순서대로 dig를 사용하여 경로를 확인합니다. 다음 중 하나를 출력합니다.
- 경로가 존재할 때
<department>/<item>: <qty> dig가nil을 반환할 때<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직접 해보기
inventory = {
fruits: { apples: 12, bananas: 4 },
meat: { beef: 7, chicken: 5 },
dairy: { milk: 9, cheese: 2 }
}
lookups = gets.chomp.split(",")
# TODO: 각 lookup에 대해 dig하고 qty를 출력하거나 'missing'을 출력하세요.
# Then print 'Total inventory: <sum>' across all items.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러