본문 바로가기
Developer/Ruby

Ruby Hash default value / default proc 사용하는 방법

by 김씩씩 2022. 9. 21.

Ruby Hash default value / default proc 사용하는 방법

 

Ruby에서 Hash를 사용할 때, default 값 혹은 default procedure지정하여 사용할 수가 있습니다.

Ruby의 Hash에 default value 와 default proc 을 설정하는 방법을 알려드리도록 하겠습니다.

 

 

default value 혹은 default proc 이 설정되지 않은 Hash

hash = Hash.new
p hash  # {}

p hash[:key1]   # nil

arr = ["a", "b", "c", "a", "a", "c"]
arr.each do |v|
  hash[v] += 1  # [에러 발생] undefined method `+' for nil:NilClass (NoMethodError)
end
p hash

default value 혹은 default proc 설정되지 않은 Hash를 사용해보는 예시입니다.

hash는 비어있는 Hash로 생성되었고, hash를 출력해보면 당연히 {} 를 출력합니다.

또한 hash[:key1] 을 출력하면 hash[:key1]은 nil 값을 반환합니다.

다음으로 arr 배열에 존재하는 문자들의 반복되는 개수를 구하기 위한 과정을 진행하는 예시에서,

hash에는 어떠한 키도 없기에 예시와 같이 hash[v] += 1 을 하면 에러가 납니다.

이를 해결하려면 조건문을 사용하던가 하여 hash[v]가 존재하지 않는다면 hash[v]의 값을 0으로 초기화 해주고 hash[v] += 1 해줘야 할 것 입니다.

 

 

Hash.default를 사용하여 default value 설정하는 방법

hash = Hash.new
p hash  # {}
p hash.default  # nil

hash.default = 0
p hash.default  # 0

p hash[:key1]   # 0

arr = ["a", "b", "c", "a", "a", "c"]
arr.each do |v|
  hash[v] += 1
end
p hash  # {"a"=>3, "b"=>1, "c"=>2}

Hash.default를 통하여 default value를 설정할 수 있습니다.

default를 설정하기 전에 Hash.default 를 사용하여 현재 default value 를 출력해보면 nil 이지만

바로 아래에서 0으로 설정해준 후 출력해보면 0을 출력하는 것을 확인하실 수 있습니다.

 

설정하지 않았을 때와 다르게 hash[:key]는 존재하지 않지만 hash[:key]를 출력하였을 때 0이 출력되는 것을 확인하실 수 있습니다.

또한 문자 반복 개수를 진행하는 과정에서 에러가 발생하지 않고 초기 값 0에서 1씩 증가시켜 문제없이 진행되는 것을 확인하실 수 있습니다.

 

 

Hash.new(default_value = nil) 방식을 사용하여 default value 설정하는 방법

hash = Hash.new(0)
p hash  # {}
p hash.default  # 0

p hash[:key1]   # 0

arr = ["a", "b", "c", "a", "a", "c"]
arr.each do |v|
  hash[v] += 1
end
p hash  # {"a"=>3, "b"=>1, "c"=>2}

Hash.new(원하는 default_value) 방식으로 Hash를 선언하는 것으로 Hash의 default value를 설정하실 수 있습니다.

 

 

Hash.default_proc을 사용하여 default proc 설정하는 방법

hash = Hash.new
p hash  # {}
p hash.default_proc  # nil

hash.default_proc = proc { |hash, key| 0 }
p hash.default_proc  # #<Proc:0x00007fd908158fb8@test.rb:5>

p hash[:key1]   # 0

arr = ["a", "b", "c", "a", "a", "c"]
arr.each do |v|
  hash[v] += 1
end
p hash  # {"a"=>3, "b"=>1, "c"=>2}

Hash.default_proc를 통하여 default proc 을 설정할 수 있습니다.

저같은 경우 간단한 예시를 위해 proc을 설정할 때 0으로 설정되게 하였지만, hashkey를 사용하여 원하는대로 설정해주시면 되겠습니다.

 

 

Hash.new { |hash, key| ... } 방식을 사용하여 default proc 설정하는 방법

hash = Hash.new { |hash, key| 0 }
p hash  # {}
p hash.default_proc  # #<Proc:0x00007fdf9c0351a0@test.rb:1>

p hash[:key1]   # 0

arr = ["a", "b", "c", "a", "a", "c"]
arr.each do |v|
  hash[v] += 1
end
p hash  # {"a"=>3, "b"=>1, "c"=>2}

Hash.new { |hash, key| proc 설정 } 방식으로 Hash를 선언하는 것으로 Hash의 default proc을 설정하실 수 있습니다.

 

 

 

이상으로 Ruby의 Hash에 default value 와 default proc 을 설정하는 방법에 대한 설명을 마치도록 하겠습니다.

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글