2011-02-04 15 views
14

La riga seguente funziona correttamente in ruby ​​1.8.7 e non in 1.8.6. Che alternativa posso utilizzare in 1.8.6Conteggiare istanze di un valore in una matrice in Ruby 1.8.6

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

Dal momento che conta non è un metodo in Array nella versione 1.8.6, sto ottenendo questo errore. C'è un metodo simile in questa versione?

risposta

9

Come suggerimento generale: c'è la davvero cool backports library by Marc-André Lafortune, che cerca di implementare il maggior numero di nuove caratteristiche di Ruby 1.8.7, 1.8.8 (cioè la punta del ramo 1_8 nel repository Subversion), le librerie standard 1.9.1 e 1.9.2 e alcuni metodi selezionati da ActiveSupport il più possibile in puro Ruby cross-1.8-1.9-compatible.

Quindi, se lo farete

require 'backports' 

si trasformerà il vostro rubino 1.8.6, 1.8.7 o 1.9.1 in quanto più vicino a Ruby 1.9.2, come è possibile senza cadere a C o la rottura retrocompatibilità.

Disclaimer: In realtà non l'ho usato da solo, dal momento che non vedo il punto di utilizzare una versione obsoleta di Ruby comunque.

+1

FYI, è ora possibile richiedere backport specifici (in questo caso 'require 'backport/1.8.7/numerabile/count'') –

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

Se è più memorabile per chiunque, 'find_all' è un alias per' select' - o forse 'select' è un alias per 'find_all'. In ogni caso, entrambi funzionano bene qui. – Telemachus

+0

Ero solito confondere tra select e find All in Groovy tutto il tempo. Quindi, se usi più di una lingua dinamica, prova ad attenervene una :) – Geo

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

Cleaner .. Grazie .. – bragboy

Problemi correlati