¿Alguien me puede mostrar una forma rubí de verificar si existe una clave en un hash y si no tiene un valor predeterminado? Supongo que hay un trazador de líneas usando a menos que haga esto pero no estoy seguro de qué usar.Si la clave no existe, cree el valor predeterminado
Respuesta
Si no necesita almacenar ese valor por defecto en hash que puede utilizar Hash#fetch
método:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Si necesita, además de almacenar su valor por defecto cada vez que acceda clave inexistente y se eres el uno inicializar el hash puede hacerlo utilizando Hash#new
con un bloque:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Constructor de la clase Hash aceptar un valor por defecto, el mismo será devuelto si no se encuentra una llave adecuada.
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
Si ya tiene un hash, se puede hacer esto:
h.fetch(key, "default value")
O explotar el hecho de que una clave no existente volverá nil
:
h[key] || "default value"
Para crear hashes con valores predeterminados depende de lo que quieras hacer exactamente.
independiente de la llave y no se almacenará:
h = Hash.new("foo") h[1] #=> "foo" h #=> {}
Dependiendo de la llave y se almacenará:
h = Hash.new { |h, k| h[k] = k * k } h[2] #=> 4 h #=> {2=>4}
Si va a almacenar un valor por defecto puede ser nulo y debe calcularlo en el momento del almacenamiento:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
Si desea asignar el valor por defecto para el hash si no existe la clave (aún), puede utilizar el operador ||=
, es decir:
h = {some_key: 'non_default_value'}
value = h[:some_key] ||= 'default_value'
value2 = h[:non_existing_key] ||= 'default_value'
value
se le asignará 'non_default_value'
y value2
se asignar 'default_value'
Después de estas asignaciones h
tendrán la non_existing_key
conjunto de 'default_value'
:
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
- 1. Diccionario devolver un valor predeterminado si la clave no existe
- 2. diccionario Python retorno pidió clave si el valor no existe
- 3. ¿Valores de matriz predeterminados si la clave no existe?
- 4. Compruebe si existe la clave de registro
- 5. PHP: anexar a valorar si la clave ya existe, si no añadir la clave
- 6. ¿Cuál es el valor predeterminado para un campo si no se proporciona un valor predeterminado?
- 7. SparseArray, comprobar si la clave existe
- 8. MySql seleccionando el valor predeterminado si no hay resultados?
- 9. php Comprobación de si el valor existe en la matriz
- 10. Compruebe si la clave existe en el diccionario. Si no, añádalo
- 11. Valor predeterminado en Bundle.getString (clave de cadena)
- 12. Configuración del valor predeterminado para el atributo de clave externa
- 13. ¿Cómo puedo comprobar si ya existe el sinónimo? No cree el sinónimo
- 14. Java map.get (clave) - ¿pone automáticamente (clave) y regresa si la clave no existe?
- 15. XSLT: si la etiqueta existe, aplique la plantilla; si no, elija el valor estático
- 16. Cree un archivo .txt si no existe, y si agrega una nueva línea
- 17. iPhone - Cómo detectar si existe una clave en NSUserDefaults standardUserDefaults
- 18. Bash: cree un archivo si no existe, de lo contrario verifique si es grabable
- 19. Comprobar si existe una clave en Memcache
- 20. Actualice una fila si existe, si no cree una nueva MySQL
- 21. Compruebe si el valor existe en dataTable?
- 22. cheque si el valor ya existe
- 23. MySQL: Insertar si existe una clave externa
- 24. DropdownListPara el valor predeterminado
- 25. Compruebe el valor si existe en la columna
- 26. Decodificación con NSCoding: ¿Existe valor para la clave?
- 27. Comprobando si existe una clave de registro
- 28. Pruebe si existe valor de registro
- 29. actualización SQLAlchemy si existe clave única
- 30. MySql: si el valor existe UPDATE else INSERT
Usando h [tecla] || "valor por defecto" no es guardar, si ya hay algo falso allí será anulado – Sebastian
Es por eso que lo enumeré como una de varias posibilidades. En general, la gente tiene una idea de cómo serán los valores de sus hashes, si sabes que no vas a guardar valores booleanos, es un enfoque perfectamente correcto. –