46 votes

Construire un hachage de manière conditionnelle

J'utilise Ruby on Rails 3.0.10 et j'aimerais créer une paire clé de hachage\valeur de manière conditionnelle. C'est-à-dire que je voudrais ajouter une clé et sa valeur associée si une condition est satisfaite :

 hash = {
  :key1 => value1,
  :key2 => value2, # This key2\value2 pair should be added only 'if condition' is 'true'
  :key3 => value3,
  ...
}

Comment puis-je faire cela et garder une "bonne" lisibilité du code ? Suis-je « obligé » d'utiliser la méthode merge

36voto

tokland Points 29813

Une approche fonctionnelle avec Hash.compact :

 hash = {
  :key1 => 1,
  :key2 => (2 if condition),
  :key3 => 3,
}.compact 

11voto

dwhalen Points 1567

Il vaut probablement mieux rester simple si vous êtes soucieux de la lisibilité :

 hash = {}
hash[:key1] = value1
hash[:key2] = value2 if condition?
hash[:key3] = value3
...

6voto

Mladen Jablanović Points 22082

Rester simple:

 hash = {
  key1: value1,
  key3: value3,
}

hash[:key2] = value2 if condition

De cette façon, vous séparez également visuellement votre cas spécial, qui peut passer inaperçu s'il est enfoui dans l'affectation littérale de hachage.

3voto

Dave Morse Points 419

J'utilise merge et l'opérateur ternaire pour cette situation,

 hash = {
  :key1 => value1,
  :key3 => value3,
  ...
}.merge(condition ? {:key2 => value2} : {})

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