2011-02-04 3 views
14

La ligne suivante fonctionne correctement dans Ruby 1.8.7 et pas dans 1.8.6. Quelle alternative je peux utiliser dans 1.8.6Nombre d'occurrences d'une valeur dans un tableau dans Ruby 1.8.6

x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.count(3) 
=> 3 

Puisque le nombre est pas une méthode en tableau dans la version 1.8.6, je reçois cette erreur. Y a-t-il une méthode similaire dans cette version?

Répondre

9

En tant que conseil général: il est le backports library by Marc-André Lafortune vraiment cool, qui tente de mettre en œuvre autant des nouvelles fonctionnalités de Ruby 1.8.7, 1.8.8 (pointe de la branche 1_8 dans le référentiel Subversion), les bibliothèques standard 1.9.1 et 1.9.2 ainsi que certaines méthodes de sélection d'ActiveSupport dans Ruby, compatible avec la version 1.8-1.9 pure.

Donc, si vous venez

require 'backports' 

il transformera votre Ruby 1.8.6, 1.8.7 ou 1.9.1 en aussi proche de Ruby 1.9.2 que possible sans perdre de C ou de rupture rétrocompatibilité. Clause de non responsabilité: Je ne l'ai pas utilisé moi-même, car je ne vois pas l'utilité d'utiliser une version obsolète de Ruby de toute façon.

+1

Pour info, il est maintenant possible d'avoir besoin de backports spécifiques (dans ce cas, 'require 'backports/1.8.7/enumerable/count'') –

11
count = x.select {|e| e == 3}.size 
+1

Si c'est plus mémorable pour tout le monde, 'find_all' est un alias pour' select' - ou peut-être 'select' est un alias pour' find_all'. En tout cas, les deux fonctionnent bien ici. – Telemachus

+0

J'avais l'habitude de confondre entre select et findAll dans Groovy tout le temps. Donc, si vous utilisez plusieurs langages dynamiques, essayez de vous en tenir à un :) – Geo

20
x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.grep(3).size 
#=> 3 
+0

Nettoyeur .. Merci .. – bragboy

Questions connexes