Probé el siguiente código ruby, que pensé que devolvería un hash de longitud de palabra a las palabras con esas longitudes. En cambio, está vacío.ruby sumando hash con valor de matriz
map = Hash.new(Array.new)
strings = ["abc","def","four","five"]
strings.each do |word|
map[word.length] << word
end
Sin embargo, si modifico a
map = Hash.new
strings = ["abc","def","four","five"]
strings.each do |word|
map[word.length] ||= []
map[word.length] << word
end
No funciona.
¿La primera versión no solo crea un hash cuyos valores predeterminados son una matriz vacía? En este caso, no entiendo por qué los 2 bloques dan valores diferentes.
Esto es extraño. Para el primer ejemplo, funciona si haces 'map = Hash.new {| h, k | h [k] = []} ' –