Qualcuno può mostrarmi un modo rubino di controllare se una chiave esiste in un hash e se non lo fornisce, allora dargli un valore predefinito. Sto assumendo che ci sia un solo liner con cui non farlo, ma non sono sicuro di cosa usare.Se la chiave non esiste creare il valore predefinito
risposta
Se non è necessario memorizzare il valore di default in hash è possibile utilizzare il metodo Hash#fetch
:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Se è necessario, oltre a conservare il valore di default ogni volta che si accede chiave inesistente e si 're quello inizializzazione l'hash è possibile farlo utilizzando Hash#new
con un blocco:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Costruttore di classe hash accettare un valore di default, lo stesso verrà restituito se un tasto corrispondente non viene trovato.
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
Se si dispone già di un hash, si può fare questo:
h.fetch(key, "default value")
Oppure si sfruttare il fatto che una chiave non esistente tornerà nil
:
h[key] || "default value"
Per creare hash con valori predefiniti dipende da cosa vuoi fare esattamente.
indipendente di chiave e non verranno memorizzate:
h = Hash.new("foo") h[1] #=> "foo" h #=> {}
seconda della chiave e verrà memorizzato:
h = Hash.new { |h, k| h[k] = k * k } h[2] #=> 4 h #=> {2=>4}
Se si memorizza un valore predefinito potrebbe essere nullo e devi calcolarlo al momento dello stoccaggio:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
Se si desidera assegnare il valore di default per l'hash se la chiave non esiste (ancora), è possibile utilizzare l'operatore ||=
, vale a dire:
h = {some_key: 'non_default_value'}
value = h[:some_key] ||= 'default_value'
value2 = h[:non_existing_key] ||= 'default_value'
value
saranno assegnati 'non_default_value'
e value2
sarà assegnare 'default_value'
Dopo queste assegnazioni h
avrà il non_existing_key
insieme a 'default_value'
:
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
- 1. Python Dizionario ritorno chiave richiesto se il valore non esiste
- 2. PHP: append di valutare se la chiave esiste già, se non aggiungere la chiave
- 3. Valore variabile predefinito XSLT se il valore non è presente
- 4. Rilascia la chiave esterna solo se esiste
- 5. Aggiungere la chiave al registro se non esiste
- 6. se la chiave esiste: l'aggiornamento, altrimenti: assoc
- 7. Qual è il valore predefinito per un campo se non viene fornito un valore predefinito?
- 8. Come verificare se il vincolo di valore predefinito IF non esiste?
- 9. modo abbreviato per creare la chiave del dizionario se non esiste
- 10. Valore predefinito su Bundle.getString (Chiave stringa)
- 11. Come creare una cartella se non esiste?
- 12. del database Postgres creare se non esiste
- 13. Creare un file se non esiste già
- 14. Java map.get (chiave) - automaticamente mettere put (chiave) e tornare se la chiave non esiste?
- 15. Python: Assegna valore se non esiste nessuno
- 16. Verificare se esiste chiave NSUserDefaults
- 17. come dire creare la procedura se non esiste in MySQL
- 18. PHP Json vedere se esiste il valore
- 19. Come verificare se esiste una chiave JSON?
- 20. Javascript - controlla se la chiave esiste - se non la crea, tutto in una riga
- 21. controllo se il valore esiste già
- 22. Verificare se il valore esiste nel dataTable?
- 23. GNU Schermo collegarsi se esiste, creare se non
- 24. Verificare se esiste una chiave in Memcache
- 25. MySQL: Inserisci se esiste una chiave esterna
- 26. Esiste una scorciatoia per la restituzione di un valore predefinito se None in Python?
- 27. Se la tabella esiste, la tabella di rilascio quindi la crea, se non esiste, basta crearla.
- 28. EntityFramework che non aggiorna la colonna con il valore predefinito
- 29. Decodifica con NSCoding: il valore esiste per chiave?
- 30. Determina se la mappa contiene un valore per una chiave?
Utilizzo di h [chiave] || "valore predefinito" non è salvato, se c'è già falso in esso sarà sovrascritto – Sebastian
Ecco perché l'ho elencato come una delle varie possibilità. Generalmente le persone hanno un'idea di quali saranno i valori dei loro hash, se sai che non salverai i valori booleani, è un approccio perfetto. –