Etiqueta

22 abril 2015

Como eliminar líneas duplicadas de una lista

El ejemplo siguiente une dos listas (listaUno y listaDos) sobre una nueva denominada listaUnida, para después eliminar de ella las líneas duplicadas, según el valor de la columna aValor.

Calculate listaUnida as listaUno
Do listaUnida.$merge(listaDos)
Do listaUnida.$sort($ref.aValor,kFalse)
Do listaUnida.$sendall($ref.$selected.$assign(kTrue),($ref.aValor=listaUnida.[$ref.$line+1].aValor)|(($ref.$line>1)&($ref.aValor=listaUnida.[$ref.$line-1].aValor)))
Do listaUnida.$remove(kListDeleteSelected)

El ejemplo siguiente está considerado como el más rápido de todos, para una "myList"  con 1578 filas de las cuales 250 están duplicadas, el tiempo fue de dos segundos.

Set current list (myList)
Set sort field (myCol)
Sort list
Set search as calculation {myList(1,#L)=myList(1,#L-1)}
Search list (Select matches (OR),Deselect non-matches (AND))
Delete selected lines

Aunque seguramente la mejor opción sea la apuntada por Xavier Blanco, que consiste en el uso del método predefinido "listaUnida.$cols.aValor.$removeduplicates(ktrue)" (Ver la página 101 del manual de programación en castellano).


1 comentario:

Anónimo dijo...

Otra opción (por Xavier Blanco)

listaUnida.$cols.aValor.$removeduplicates(ktrue) (Ver la página 101 del manual de programación en castellano)