/ / Estrarre più valori da un hash in ruby, modificare l'hash originale e restituire i valori estratti - ruby, hash

Estrarre più valori da un hash in ruby, modificare l'hash originale e restituire i valori estratti - ruby, hash

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 № 1

Che 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.