Ir al contenido


Foto

Eliminar items duplicados en array dinámico


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 agosto 2010 - 06:21

Compañeros, tengo un array dinámico de TPoint, necesito eliminar los items duplicados y redimensionar el array.  Recibo ideas.

Muchas gracias

Saludos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 agosto 2010 - 06:53

Compañeros, tengo un array dinámico de TPoint, necesito eliminar los items duplicados y redimensionar el array.  Recibo ideas.

Muchas gracias

Saludos


Hola amigo, no he trabajado con un arreglo de TPoint, pero ¿ no sería más fácil crear un array secundario y "pasar" con un loop los valores que no están repetidos ?

Si pudieras colocar las dimensiones y los valores de tu Arreglo, sería de mucha utilidad para poder darte una respuesta más acertada.

Salud OS
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 agosto 2010 - 07:03

Gracias por contestar Egostar.

Hola amigo, no he trabajado con un arreglo de TPoint, pero ¿ no sería más fácil crear un array secundario y "pasar" con un loop los valores que no están repetidos ?


Esta solución ya la intenté y me funciona, pero no estoy a gusto con el código, pensé que algún compañero  depronto tuviera algo resuelto o alguna idea independientemente del tipo de array.

Gracias.


  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 agosto 2010 - 07:28

Hola Wilson,
Lamentablemente, creo, que no hay otro método que el recorrer el array elemento a elemento y sobreescribir los valores duplicados por otros. Luego volver a redimensionar, y para ello deberá llevarse la cuenta de repetidos encontrados.

El algoritmo se puede volver un poco mas fácil si los datos están ordenados ya que no requiere de un doble bucle. En este escenarios todos los repetidos a un elemento están en posiciones contínuas. La idea es similar al anterior enfoque:
Se evalúa posición a posición y se sobreescribe el valor siguiente al evaluado en cuanto se deje de evaluar repetidos.

Lo explico:
1. Tomemos la posición i-ésima y la siguiente i-ésima + 1. Si resulta ser que ambos son iguales, se incrementa la cantidad de repetidos. Guardamos este i+1 en una variable temporal. Seguimos evaluando, i+2, i+3... así hasta que en algún i+m ya no se detecte un valor idéntico, en estos nuevos repetidos no pisamos el valor temporal... sólo buscamos quedarnos con la 1ra aparición. Entonces podemos llegar a la conclusión de que en i+m está el siguiente número diferente. Entonces en la posición i+1 (el primer repetido de su serie) guardamos este nuevo valor (el que está en i+m). Continuamos el procedimiento desde este punto.
Al final tendremos los valores diferentes en forma ordenada y contigua y sabremos la cantidad total de repetidos. Nos resta ahora redimensionar.

Espero que se entienda la idea.

Ahora el problema es que en tu caso el arreglo es de tipo TPoint. Y éste es un record de dos campos. Requiere de mayor control ¿Cuando se considera repetido? Cuando la dupla (X,Y) es igual a otra (X,Y)? ¿O se considera a cada campo por separado?

Saludos,
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 agosto 2010 - 07:30

Gracias Delphius por tu respuesta.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.