Вы можете быть введены в заблуждение о том, как работает Hash.default
.
Перед вами Marshal.dump
распечатайте структуру данных. Это {}
. Это потому, что вы объединяете каждую строку в ноль, а не в пустой массив. Код ниже иллюстрирует и решает вашу проблему.
s = Hash.new
s.default = Array.new
s[0] = []
s[0] << "Tigger"
s[7] = []
s[7] << "Ruth"
s[7] << "Puuh"
p s
data = Marshal.dump(s)
ls = Marshal.restore( data )
p ls
Возвращает:
{0=>["Tigger"], 7=>["Ruth", "Puuh"]}
{0=>["Tigger"], 7=>["Ruth", "Puuh"]}
EDIT:
Я вставляю много данных в хеш
Так что, возможно, какой-нибудь вспомогательный код сделает процесс вставки более плавным:
def append_to_hash(hash, position, obj)
hash[position] = [] unless hash[position]
hash[position] << obj
end
s = Hash.new
append_to_hash(s, 0, "Tigger")
append_to_hash(s, 7, "Ruth")
append_to_hash(s, 7, "Puuh")
s.default = Array.new // this is only for reading
p s
data = Marshal.dump(s)
ls = Marshal.restore( data )
p ls