41 votes

Si la clé n'existe pas, créez la valeur par défaut

Quelqu'un peut-il me montrer un moyen ruby de vérifier si une clé existe dans un hachage et si ce n'est pas le cas, lui donner une valeur par défaut. Je suppose qu'il existe une seule doublure à moins que ce soit pour le faire, mais je ne sais pas quoi utiliser.

60voto

Michael Kohl Points 33345

Si vous avez déjà un hachage, vous pouvez faire ceci :

 h.fetch(key, "default value")

Soit vous exploitez le fait qu'une clé inexistante renverra 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 #=> {}
    
  • Dépend de la clé et sera stocké :

     h = Hash.new { |h, k| h[k] = k * k } 
    h[2] #=> 4
    h #=> {2=>4}
    

21voto

nkm Points 2739

Le constructeur de la classe Hash accepte une valeur par défaut, la même sera renvoyée si une clé correspondante n'est pas trouvée.

 h = Hash.new("default")

h.has_key?("jake")
=> false

h["jake"]
=> "default"

h["jake"] = "26"
h.has_key?("jake")
=> true

8voto

Matthijs Points 406

Vous pouvez utiliser l'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"}

5voto

phatmann Points 4153

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()}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X