Hash 순회하기
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 34번째.
해시는 열거 가능하므로 배열과 마찬가지로 반복할 수 있습니다. 원하는 작업에 따라 세 가지 일반적인 패턴이 있습니다.
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% 할인할 items 목록이며, 해시의 기호와 이름이 일치해야 합니다.
다음 순서로 출력합니다:
<item>: $<final_price>형식으로 각 item마다 한 줄을 출력합니다. item이 discount 목록에 있으면 최종 가격은 할인된 값이고, 그렇지 않으면 원래 값입니다.each를 사용해 순회합니다. items는 원래 순서를 유지합니다. 할인에는 정수 나눗셈을 사용합니다(price / 2).Was: $<n>: 원래 총합(values.sum사용)Now: $<n>: 할인 후 총합- 최종 가격이 여전히
2보다 큰 items의 이름을,으로 연결합니다(새 해시에서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 해시 구축; 줄, 합계, 비싼 항목 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러