기본값을 사용하는 Hash.new
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 33번째.
기본적으로 해시에서 존재하지 않는 키를 조회하면 nil이 반환됩니다:
scores = {}
puts scores["Alice"] # nilHash.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을 작성하면 새 값과 함께 키가 추가됩니다.
챌린지
쉬움쉼표로 구분된 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: 2020에 도달하는 category가 없으면 아무것도 출력하지 않습니다.
직접 해보기
entries = gets.chomp.split(",")
# TODO: totals = Hash.new(0); 카테고리별 금액을 누적;
# 그런 다음 총합이 20 이상인 카테고리를 총합 내림차순으로 정렬하여 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러