Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar duplicados lista con mismos caracteres (https://www.clubdelphi.com/foros/showthread.php?t=59706)

Paolo 05-09-2008 11:37:37

Eliminar duplicados lista con mismos caracteres
 
Me gustaria saber como de esta tstringlist :confused: con estos valores

012340 012340
402301 012350
012350 Eliminar los que tengan los mismos --->
230140 caracteres y que quede como --->

:) Gracias

tcp_ip_es 05-09-2008 12:45:15

una pequeña idea....
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var pepe:tstringlist;
i,p:integer;
begin
pepe:=tstringlist.Create;

pepe.add('555');
pepe.add('333');
pepe.add('555');
pepe.Sort;
i:=0;
while i <= pepe.Count-1 do
begin
 if (pepe.Find(pepe[i],p)) and (i<>p) then
  pepe.delete(p);
 inc(i);
end;

memo1.lines:=  pepe;


end;

coso 05-09-2008 12:45:23

hola suponiendo que cada numero este en una linea distinta, deberas usar un doble bucle :

Código Delphi [-]

for i := 0 to sl.count - 1 do
begin
   s := sl[i];
   for j := i to sl.count - 1 do 
      if sl[i] = sl[j] then sl[j].Delete;
end;

mas o menos

coso 05-09-2008 12:47:08

tcp_ip... vamos a tener un problema tu y yo eh? :D:D:D

coso 05-09-2008 12:47:38

ah no que ahora es diferente Ok ;)

dec 05-09-2008 12:49:25

Hola,

No sé si valdrá para algo o qué, pero, creo recordar que los "TStrings" tienen una propiedad "AllowDuplicates".

Paolo 05-09-2008 13:03:01

Si creo recordar que la tienen
 
Si creo recordar que la tienen, pero la idea no es esa sino elimine los que tengan los mismos caracteres aunque sea en distinto orden osea que elimine el "0135" y el "5301" y el "3501" y solo deje uno de los tres da igual cual.

Gracias por las respuestas :)

coso 05-09-2008 13:31:54

hola, no estoy muy seguro pero creo q esto funciona

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
        i,j : integer;
begin
        for i := 0 to Memo1.Lines.Count - 1 do
        for j := i + 1 to Memo1.Lines.Count - 1 do
           if Permuta(Memo1.Lines[i],Memo1.Lines[j]) then Memo1.Lines.Delete(i);
end;
function TForm1.Permuta(s1,s2 : string) : boolean;
var
        j : integer;
begin
        result := true;
        j := 1;
        while (j < length(s1)) and (result = true) do
        begin
                result := result and (Pos(s1[j],s2)<>0);
                stringreplace(s2,s1[j],'',[]);
                inc(j);
        end;
end;

tendrias que mirar casos donde hayan caracteres repetidos (ex, 5113, 1351, 1355...creo que si, pero no se bien bien si los consideraria igual). Al menos, la idea va por aqui

Paolo 05-09-2008 15:07:28

Gracias a todos, eso es parte de lo que yo quiero
 
Me funciona pero ahora lo que quiero hacer es que los compare de dos en dos, que no sea lo mismo 13 que 31, de todas formas lo dicho gracias a todos. :D:D

tcp_ip_es 08-09-2008 07:26:54

Cita:

tcp_ip... vamos a tener un problema tu y yo eh?
¿y eso por???

coso 08-09-2008 09:57:24

(porque te me adelantaste ese dia en todas las respuestas)

tcp_ip_es 08-09-2008 10:10:46

estaba fino ese día :D hoy estoy más denso.... :rolleyes:

coso 08-09-2008 10:11:24

es lo q tienen los lunes, ya pasara ;)


La franja horaria es GMT +2. Ahora son las 23:42:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi