해시 순회하기
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 34번째.
해시(Hash)는 Enumerable이므로 배열처럼 순회할 수 있습니다. 필요한 것이 무엇인지에 따라 세 가지 일반적인 패턴이 있습니다.
each는 키와 값을 모두 전달합니다:
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직접 해보기
prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)
# TODO: each를 통해 final-price 해시를 구축; 라인, 총계, 비싼 항목 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.