Tengo una matriz A. Me gustaría comprobar si contiene valores duplicados. ¿Cómo lo haría?¿Cómo verifico un conjunto de duplicados?
Respuesta
Sólo tiene que llamar uniq
en él (que devuelve una nueva matriz sin duplicados) y ver si la matriz uniq
ed tiene menos elementos que el original:
if a.uniq.length == a.length
puts "a does not contain duplicates"
else
puts "a does contain duplicates"
end
Tenga en cuenta que los objetos de la matriz tienen que responder a hash
y eql?
en un significado para uniq
para que funcione correctamente.
Además, 'uniq!' Devolverá 'nil' si no se encuentran duplicados, alterando self para eliminar duplicados. Hay muchos métodos de matriz disponibles: http://ruby-doc.org/core/classes/Array.html – David
Por supuesto, si no responden a 'eql?' De una manera significativa, entonces ¿qué hace? duplicar "incluso ** significa **? Y una vez que haya definido 'eql?', 'Hash' debe ser consistente con él. –
@Karl: ¿Que dos elementos en la matriz son '==' el uno al otro? – sepp2k
el fin de encontrar los elementos duplicados, utilizo este método (con Ruby 1.9.3):
array = [1, 2, 1, 3, 5, 4, 5, 5]
=> [1, 2, 1, 3, 5, 4, 5, 5]
dup = array.select{|element| array.count(element) > 1 }
=> [1, 1, 5, 5, 5]
dup.uniq
=> [1, 5]
select {array.count} es un bucle anidado, está haciendo un algoritmo complejo O (n^2) para algo que se puede hacer en O (n). – apeiros
Tiene razón, para resolver la pregunta de este Skizit que podemos usar en O (n); pero para descubrir qué elementos están duplicados, un O (n^2) algo es la única forma en que puedo pensar hasta ahora. – jmonteiro
ordena y elimina consecutivos para n log n – user3125280
posible que desee monkeypatch matriz si se utiliza más de una vez:
class Array
def uniq?
self.length == self.uniq.length
end
end
entonces:
irb(main):018:0> [1,2].uniq?
=> true
irb(main):019:0> [2,2].uniq?
=> false
Evitaría parches de monos para envolver un trazador de líneas. –
parches de mono tienden a morder –
@sidewaysmilk ¿por qué se debe evitar esto? Parece el camino ruby: elegante, dinámico y seco. – hamstar
Si usted quiere volver los duplicados, se puede hacer esto:
dups = [1,1,1,2,2,3].group_by{|e| e}.keep_if{|_, e| e.length > 1}
# => {1=>[1, 1, 1], 2=>[2, 2]}
Si sólo desea los valores:
dups.keys
# => [1, 2]
Si desea que el número de duplicados:
dups.map{|k, v| {k => v.length}}
# => [{1=>3}, {2=>2}]
- 1. Python: cómo permitir duplicados en un conjunto?
- 2. Python: detectar duplicados usando un conjunto
- 3. ¿Puede un conjunto tener elementos duplicados?
- 4. STL + Conjunto ordenado + sin duplicados
- 5. Filtrar duplicados de un conjunto de datos cargado en SSIS
- 6. ¿Cómo verifico NLS_LANG del cliente?
- 7. ¿Cómo verifico/verifico/pruebo/valido mi contraseña de SSH?
- 8. ¿Cómo verifico si un objeto contiene una matriz de bytes?
- 9. ¿Cómo verifico un certificado SSL en python?
- 10. ¿Cómo verifico si un repositorio está vacío?
- 11. ¿Cómo verificar si ya existe un valor para evitar duplicados?
- 12. ¿Cómo verifico si existe un archivo en un control remoto?
- 13. ¿Cómo implementar un conjunto?
- 14. ¿Cómo verifico posibles conflictos de fusión/rebase en Mercurial?
- 15. duplicados eliminar de un QList
- 16. Pregunta de Linq que reduce un subconjunto de duplicados a un solo valor dentro de un conjunto más grande?
- 17. ¿Cómo verifico si un dispositivo está ejecutando iOS 6?
- 18. ¿Cómo verifico si un MSI particular está instalado?
- 19. ¿Cómo verifico los valores nulos en un Wicket Textfield?
- 20. ¿Cómo verifico si un CGPoint se ha inicializado?
- 21. ¿Qué es un yeso no revisado y cómo lo verifico?
- 22. ¿Cómo verifico si un valor dado es una lista genérica?
- 23. ¿Cómo detectar si un conjunto de conjuntos contiene otro conjunto?
- 24. ¿Cómo verifico si existe una clave en un registro?
- 25. Cómo verifico que un elemento no existe en Selenium 2
- 26. ¿Cómo verifico si mi matriz incluye un objeto?
- 27. ¿Cómo verifico si un dispositivo USB dado está enchufado?
- 28. ¿Cómo verifico escalar para obtener un valor 'inf' en Perl?
- 29. ¿Cómo verifico los métodos que tiene un objeto en Python?
- 30. ¿Cómo verifico si un directorio es grabable en PHP?
"marcados como duplicados" Bueno, esto es bastante meta considerando la cuestión. – cpursley
"¿Cómo verifico una matriz de duplicados?" no es exactamente la misma pregunta que "¿Cómo encontrar y devolver un valor duplicado en una matriz?". Esta pregunta se pregunta cómo determinar la singularidad de la matriz, mientras que la otra pregunta cómo extraer valores duplicados de la matriz. No creo que deba marcarse como duplicado, pero la otra pregunta es similar y debe estar vinculada en un comentario. – emery
Pero la ironía es rica, ¿no? – oMiKeY