2011-02-04 11 views
14

La siguiente línea funciona bien en ruby ​​1.8.7 y no en 1.8.6. ¿Qué alternativa que puede utilizar en 1.8.6Contar instancias de un valor en una matriz en Ruby 1.8.6

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

Desde recuento no es un método en Array en la versión 1.8.6, que estoy recibiendo este error. ¿Hay un método similar en esta versión?

Respuesta

9

Como consejo general: no es el genial backports library by Marc-André Lafortune, que trata de poner en práctica tanto de las novedades de la Rubí 1.8.7, 1.8.8 (es decir, la punta de la rama 1_8 en el repositorio de Subversion), las bibliotecas estándar 1.9.1 y 1.9.2, así como algunos métodos selectos de ActiveSupport como sea posible en Ruby puro, compatible con cross-1.8-1.9.

lo tanto, si usted acaba de hacer

require 'backports' 

que dará vuelta a su rubí 1.8.6, 1.8.7 o 1.9.1 en lo más cercano a Ruby 1.9.2 como es posible sin caer en C o romper compatibilidad al revés.

Descargo de responsabilidad: Realmente no lo he usado, ya que no veo el sentido de usar una versión obsoleta de Ruby de todos modos.

+1

FYI, ahora es posible requerir backports específicos (en este caso 'require 'backports/1.8.7/enumerable/contar'') –

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

Si es más memorable para cualquier persona, 'find_all' es un alias para' select' - o tal vez 'select' es un alias para' find_all'. En cualquier caso, ambos funcionan bien aquí. – Telemachus

+0

Solía ​​confundir entre seleccionar y encontrar todo en Groovy todo el tiempo. Por lo tanto, si usa más de un lenguaje dinámico, intente seguir uno :) – Geo

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

Cleaner .. Gracias .. – bragboy

Cuestiones relacionadas