PDA

Ver la Versión Completa : Eliminar duplicados lista con mismos caracteres


Paolo
05-09-2008, 11:37:37
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....
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 :



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, 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


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
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
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 ;)