Nem todo mundo sabe que o construtor da classe Hash em ruby pode ser usado para inicializar o valor padrão de hash.
Por exemplo, se nossos valores de hash forem matrizes, em vez de:
h = {}
h[:foo] = []
h[:foo] << :bar
Podemos inicializar o hash desta maneira:
h = Hash.new { |key, value| key[value] = [] }
h[:foo] << :bar
Isso é muito mais rubi 🙂
E como você retornaria quantas vezes cada palavra está em algum documento (ou seja, matriz?):
Eu escreveria esse código:
class Inc
attr_reader :value
def initialize
@value = 0
end
def inc
@value += 1
end
def inspect
value
end
end
h = Hash.new { |k,v| k[v] = Inc.new }
%(some array of words).each { |word| h[word].inc }
E agora h
armazena palavras como chaves e contagens de palavras na matriz como valores.