/ / Comment additionner des valeurs dans un hash de hash? - ruby-sur-rails, ruby-sur-rails-3, ruby-sur-rails-3.1

Comment faire la somme des valeurs dans un hash de hash? - rubis sur rails, rubis sur rails-3, rubis sur rails-3.1

J'ai un hachage dans un autre hachage, essentiellement ceci:

@hash_os_versions = Hash.new{ |h,k| h[k] = Hash.new{|h, k| h[k] = 0} }

Ce hachage génère ceci:

operation_system => {version, count}*

Un exemple:

{"Linux"=>{"Fedora"=>4, "Debian"=>2, "OpenSUSE"=>3, "Red Hat"=>2, "Ubuntu"=>2}, "Mac OS"=>{"OS X 10.4 Tiger"=>3, "OS X 10.6 Snow Leopard"=>4, "OS X 10.5 Leopard"=>3, "OS X 10.7 Lion"=>2}, "Windows"=>{"Windows 2000"=>3, "Windows 7"=>2, "Windows 98"=>2, "Windows Vista"=>2, "Windows XP"=>2}}

Comment puis-je résumer le compte? Au cas où, 4 +2 +3 +2 ...

J'ai essayé ça, mais ça ne marche pas:

<%= sum = os_versions[1].inject(0) { |sum, tuple| sum += tuple[1] } %>

Retourne toujours zéro.

Ps: désolé mon anglais: P

Réponses:

1 pour la réponse № 1

Vous devez accéder au hachage à l'aide d'une clé, pas d'un index. Cela devrait marcher.

2.0.0-p451 :006 > sum = os_versions["Mac OS"].inject(0) { |sum, tuple| sum += tuple[1] }
=> 12