Menu
Coddy logo textTech

기본값을 사용하는 Hash.new

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

기본적으로 해시에서 존재하지 않는 키를 조회하면 nil이 반환됩니다:

scores = {}
puts scores["Alice"]   # nil

Hash.new(default)는 이를 변경합니다. 존재하지 않는 모든 키는 전달한 값을 반환합니다:

scores = Hash.new(0)
puts scores["Alice"]   # 0

카운터를 작성하는 가장 깔끔한 방법입니다. 증가시키기 전에 if scores[name].nil?을 확인할 필요가 없습니다:

counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
  counts[letter] += 1
end
puts counts.inspect   # {"a"=>3, "b"=>1, "c"=>1}

중요: Hash.new(0)은 기본값을 0으로 설정하지만, 키를 읽을 때 키를 저장하지는 않습니다. 할당할 때까지 해시는 비어 있는 상태로 유지됩니다. 따라서 counts[letter] += 1을 작성하면 새 값과 함께 키가 추가됩니다.

challenge icon

챌린지

쉬움

쉼표로 구분된 category:amount 항목 목록(예: food:12,gas:30,food:8,books:25,gas:15)을 읽습니다. Hash.new(0)을 사용하여 category별 totals의 Hash를 만든 다음, total이 20 이상인 category만 total을 내림차순으로 정렬하여 한 줄에 하나씩 출력합니다.

<category>: <total>

위 예시 입력의 경우 출력은 다음과 같습니다.

gas: 45
books: 25
food: 20

20에 도달하는 category가 없으면 아무것도 출력하지 않습니다.

직접 해보기

entries = gets.chomp.split(",")

# TODO: totals = Hash.new(0); 카테고리별 금액을 누적;
#       그런 다음 총합이 20 이상인 카테고리를 총합 내림차순으로 정렬하여 출력
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Ruby 컴파일러