Ho un file YAML che sto usando per seminare alcuni modelli di Ruby on Rails. Lo carico usando YAML.load(filename)
. Alcuni dei tasti necessitano di qualche post-elaborazione prima di creare i modelli RoR, ad esempio i file devono essere aperti dai nomi dei file.
Voglio estrarre due valori dall'hash in variabili, lasciando l'hash senza questi valori presenti.
Qual è il modo più idiomatico di farlo in Ruby?
Modificare:
Ho provato a fare:
value1 = hash.delete(:key1)
value2 = hash.delete(:key2)
che mi dà value1
e value2
bene, ma lascia hash invariato.
risposte:
1 per risposta № 1Che ne dici di usare un enumeratore ed estrarre ogni valore dall'hash, mantenendo l'hash nell'entità originale.
hash = { :key1 => value1, :key2 => value2 }
# Iterates over values
hash.each_value {|val| print val}
o un'altra alternativa:
print hash.shift[1] while not hash.empty?
Normalmente il delete
metodo cancella la chiave specificata da hash e restituisce il valore cancellato.
hash.delete (:key1) # => returns the deleted value. Now the hash should contain {:key2=>value2}
0 per risposta № 2
L'hash generato da YAML.load
usa le chiavi stringa piuttosto che i tasti simbolo. Stavo cercando di eliminare utilizzando i tasti dei simboli, quindi non è stato eliminato nulla.