2015-02-05 4 views
0

Я хранил Хеш Хэша.Ruby Hash of Hash, Добавление новых товаров

filelists { filename => [another hash] } 
anotherhash {id => method} 

где filename - имя файла, id - идентификатор сервера, а метод - тип блокировки, чтения или записи.

def addfile(client, input) 
    #byebug 
    serverid = input.split(' ')[2].strip 
    filename = input.split(' ')[1].strip 
    puts "RECEIVED FILE NOTIFICATION: " + serverid + " FILENAME: " + filename 
    if @filelists.include?(filename) 
    @filelists[filename] = {serverid.to_i => 'r'} 
    else 
    @filelists[filename] = Hash.new 
    @filelists[filename] = {serverid.to_i => 'w'} 
    puts "New Hash Created for: " + filename 
    end 
    client.puts "File Accepted: " + filename 
    puts "File Accepted: " + filename + "\n\n" 
    printfiles(filename) 
end 

Что происходит, когда вы добавляете еще один элемент в хэш, он просто удаляет предыдущий элемент.

После первого сервера загрузки файлов имеет это:

{"ds.txt"=>{1=>"w"}, "fileserver.rb"=>{1=>"w"}} 

Затем, когда второй сервер начинает загружать файлы, он просто переписывает по сравнению с предыдущим хэша.

Любые советы/предложения будут оценены.

+1

Обратите внимание, что '@filelists [имя файла] = Hash.new' не имеет никакого эффекта, так как пустой хэш переписывается в следующей строке. –

ответ

0

Был в неправильном формате. Необходимо, чтобы изменить к

@filelists[filename][serverid.to_i] = 'r' 

Заключительной код

def addfile(client, input) 
#byebug 
serverid = input.split(' ')[2].strip 
filename = input.split(' ')[1].strip 
puts "RECEIVED FILE NOTIFICATION: " + serverid + " FILENAME: " + filename 
if @filelists.include?(filename) 
    @filelists[filename] = {serverid.to_i => 'r'} 
else 
**@filelists[filename][serverid.to_i] = 'r'** 
    puts "New Hash Created for: " + filename 
end 
client.puts "File Accepted: " + filename 
puts "File Accepted: " + filename + "\n\n" 
printfiles(filename) 
end