2009-09-06 17 views
5

¿Hay una buena manera de rubí para eliminar duplicados en las listas enumerables (es decir, rechazo, etc.)Rubí eliminación de duplicados en las listas enumerables

+0

¿Puede especificar qué tipo de lista tiene en mente que (1) * no es * una matriz pero (2) podría tener duplicados? Los rangos no pueden tener duplicados. – Telemachus

+0

"listas enumerables" no está claro. ¿Es una variable de instancia de la clase Enumerator? – peterpengnz

Respuesta

10

Por matriz se puede utilizar el método uniq()

a = [ "a", "a", "b", "b", "c" ] 
a.uniq #=> ["a", "b", "c"] 

así que si sólo

(1..10).to_a.uniq 

o

%w{ant bat cat ant}.to_a.uniq 

, porque de todos modos casi todos los metho ds que implemente volverá como una clase Array.

+1

Tenga en cuenta que '(1..10) .to_a.uniq' nunca podría ser otra cosa que tipeo desperdiciado ya que los rangos de definición no pueden tener elementos duplicados. (¿O hay algo de lo que estoy muy confundido?) – Telemachus

+0

Tienes razón, nunca está duplicado. Solo da una idea. Agregué otra muestra, gracias. – Jirapong

+2

Es técnicamente posible que un rango (de algo distinto de Fixnums) produzca elementos duplicados; todo lo que se requiere es que para algún objeto x, x.succ == x. Por ejemplo, una clase que represente números de Fibonacci tendría esta propiedad para el número 1. No estoy seguro de por qué lo haría, lo más probable es que sea un signo de locura, pero es * posible *. – Chuck

2

Bueno, la estrategia sería la de convertir a las matrices y eliminar los duplicados de las matrices . Por cierto las listas son matrices en ruby ​​en cualquier caso, así que no estoy seguro de lo que quiere decir con "enumerable lists"

+1

También estoy confundido por "lista enumerable". Si es una matriz, entonces es realmente fácil. Si es una clase de Enumerador, entonces se requiere pensar mucho más. – peterpengnz

1

Me gusta usar los operadores lógicos establecidos, si el objeto no tiene un método .uniq.

a = [2,3,3,5,5,5,6] # => [2, 3, 3, 5, 5, 5, 6] 
a | a # => [2, 3, 5, 6] 
Cuestiones relacionadas