해시 순회하기
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 34번째.
해시는 열거 가능하므로, 배열과 마찬가지로 반복할 수 있습니다. 원하는 바에 따라 세 가지 일반적인 패턴이 있습니다.
each는 키(key)와 값(value)을 모두 제공합니다:
prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
puts "#{item}: $#{price}"
endeach_key는 키만 순회합니다:
prices.each_key { |k| puts k } # apple, bread, milkeach_value는 값들만 순회합니다:
prices.each_value { |v| puts v } # 1, 3, 4그리고 지난 장에서 보았던 모든 Enumerable 메서드인 map, select, reduce는 해시에서도 작동합니다. 반복할 때마다 키/값 쌍(또는 요소가 2개인 배열)을 받게 됩니다:
prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}챌린지
중급가격 목록에 세일을 적용하려고 합니다. 해시 prices가 주어집니다 (아이템 심볼 => 가격 정수).
한 줄의 입력을 읽으세요: 50% 할인할 아이템의 쉼표로 구분된 목록입니다 (해시의 심볼 이름과 일치함).
다음 순서대로 출력하세요:
- 아이템당 한 줄씩
<item>: <item>: $<final_price>lt;final_price>형식으로 출력합니다. 여기서 최종 가격은 아이템이 할인 목록에 있으면 할인된 가격이고, 그렇지 않으면 원래 가격입니다.each를 사용하여 반복하세요. 아이템은 원래 순서를 유지합니다. 할인 계산 시 정수 나눗셈을 사용하세요 (price / 2). Was: Was: $<n>lt;n>: 원래 총합 (values.sum사용)Now: Now: $<n>lt;n>: 할인 적용 후 총합- 최종 가격이 여전히
2보다 큰 아이템들의 이름을,로 연결하여 출력하세요 (새 해시에서select+keys사용)
기본 해시에서 입력이 bread,milk인 경우, 출력은 다음과 같습니다:
apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese치트 시트
each, each_key, each_value를 사용하여 해시를 반복 처리하기:
prices = { apple: 1, bread: 3, milk: 4 }
prices.each { |item, price| puts "#{item}: $#{price}" }
prices.each_key { |k| puts k }
prices.each_value { |v| puts v }map, select, reduce와 같은 Enumerable 메서드도 해시에서 작동하며, 반복마다 키/값 쌍을 받습니다:
prices.select { |item, price| price > 2 }
# { bread: 3, milk: 4 }유용한 해시 메서드: 모든 값을 더하는 .values.sum, 키 배열을 가져오는 .keys.
직접 해보기
prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)
# TODO: each를 사용하여 최종 가격 해시를 생성하고, 각 항목, 합계, 비싼 품목을 출력하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.