Quelqu'un peut-il me montrer une manière Ruby de vérifier si une clé existe dans un hachage et si elle ne lui donne pas alors une valeur par défaut. Je suppose qu'il y a une seule ligne qui utilise à moins mais je ne sais pas quoi utiliser.
Si vous avez déjà un hachage, vous pouvez le faire:
h.fetch(key, "default value")
Ou vous exploitez le fait qu'une clé non existante retournera nil
:
h[key] || "default value"
Pour créer des hachages avec des valeurs par défaut, cela dépend de ce que vous voulez faire exactement.
Indépendant de la clé et ne sera pas stocké:
h = Hash.new("foo")
h[1] #=> "foo"
h #=> {}
En fonction de la clé et sera stocké:
h = Hash.new { |h, k| h[k] = k * k }
h[2] #=> 4
h #=> {2=>4}
Le constructeur de la classe Hash accepte une valeur par défaut, elle sera retournée si aucune clé correspondante n'est trouvée.
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
Si vous n'avez pas besoin de stocker cette valeur par défaut dans le hachage, vous pouvez utiliser Hash#fetch
méthode:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Si vous devez en plus stocker votre valeur par défaut à chaque fois que vous accédez à une clé inexistante et que vous êtes celui qui initialise le hachage, vous pouvez le faire en utilisant Hash#new
avec un bloc:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Vous pouvez utiliser le ||=
opérateur:
hash = {some_key: 'some_value'}
puts hash[:some_key] ||= 'default_value' # prints 'some_value'
puts hash[:non_existing_key] ||= 'default_value' # prints 'default_value'
puts hash.inspect # {:some_key=>"some_value", :non_existing_key=>"default_value"}
Si vous stockez une valeur par défaut qui peut être nulle et que vous devez la calculer au moment du stockage:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}