2009-08-11 21 views
3

So habe ich eine Datei in Form von:Wie setze ich Elemente einer Datei in einen Hash? -Ruby

Key1 Value1 
Key2 Value2 
Key3 Value3 

durch eine Lasche getrennt. Meine Frage ist, wie öffne ich diese Datei und lege sie in einen Hash? Ich habe versucht zu tun:

fp = File.open(file_path) 

fp.each do |line| 
    value = line.chomp.split("\t") 
    hash = Hash[*value.flatten] 
end 

Aber am Ende dieser Schleife der @datafile Hash nur den neuesten Eintrag enthalten ... Ich will es irgendwie all .....

Antwort

8

hash[key] = value eine hinzufügen neues Schlüssel-Wert-Paar. hash.update(otherhash), um die Schlüssel/Wert-Paare von otherhash zu Hash hinzuzufügen.

Wenn Sie hash = foo tun, weisen Sie den Hash neu zu und verlieren den alten Inhalt.

Also für Ihren Fall können Sie tun:

hash = {} 
File.open(file_path) do |fp| 
    fp.each do |line| 
    key, value = line.chomp.split("\t") 
    hash[key] = value 
    end 
end 
+0

Vergessen Sie nicht, den Hash (hash = {}) vor dem File.open-Block zu instanziieren, sonst ist er nach der letzten Endanweisung nicht verfügbar. –

+0

Guter Punkt. Fest. – sepp2k

0

Tragen Sie eine Antwort von https://stackoverflow.com/a/4120285/2097284:

hash = Hash[*File.read(file_path).split("\t")]

Dies erweitert zu

hash = Hash["Key1", "Value1", "Key2", "Value2", "Key3", "Value3"].

Für mehr Robustheit ersetzen Sie "\t" durch /\s+/ (um jede Art von Leerzeichen zu ermöglichen).

Verwandte Themen