Autor Beitrag
Philipp_Reitter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 430



BeitragVerfasst: Mo 19.02.07 16:14 
hi

ich hab nen array[1..1000000] to String und da kommen setzt ne mio strings rein und ich will dass nur immer einer drinnen ist... ok klingt blöd... es kann sein dass 1000 oder so gleich sind aber ich will nur einen drinnen haben von den 1000... wie kann ich das aussortieren lassen?
und das schnell noch dazu wenns geht... (also das aussorieren ned das antworten auf mein topic ^^)

mfg
Philipp

Moderiert von user profile iconTino: Überflüssige Punkte im Titel entfernt.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 19.02.07 16:24 
Nimm anstatt eines Arrays eine TStringList.
Setzte die Eigenschaften Sorted und Duplicates so, dass doppelte Einträge verhindert werden. Siehe dazu Online-Hilfe.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Mo 19.02.07 16:27 
Also wir haben das bei kleineren Sachen mal so gelöst : Einfach eine TStringList mitlaufen lassen, die sortiert ist und doppelte Strings nicht zulässt. Dann bevor du den String ins Array einfügst, einfach in die StringList einfügen, wird er angenommen, hast Du ihn noch nicht...

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
Philipp_Reitter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 430



BeitragVerfasst: Mo 19.02.07 20:55 
ok ... das mit der string list ist gut nur...
ich hab 300700 strings und das auslesen dauert schon so lange ... deshalb ja der array weil der schneller ist..
mit stringlist dauerts ewig!
ich denk ich lass dann einfach zum schluss wenn ich die strings in ne datei schreibe einfach das aussortieren lasse indem ich einfach so in etwa sag:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for i:=0 to 1000000
  for i2:= to 1000000
    if array[i] <> array2[i2] then 
    begin
      array2[i3]:=array[i];
      i3:=i3+1;
    end;
  end;
end;


müsste doch hinhauen oder
(hab gad kein delphi zum probieren....)

mfg
Philipp
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mo 19.02.07 21:10 
Hab' ich das richtig verstanden: In array und array2 steht dasselbe drin? Zum einen ist das speichernutzungstechnisch von Nachteil und zum anderen durchläufst du auf diese Weise etwas mehr als 10^12 Iterationsschritte. Ich weiß ja nicht wie die Stringlist das intern handhabt, aber ich behaupte jetzt einfach mal die ist effektiver.

Gruß

Calculon
--
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 19.02.07 21:57 
user profile iconPhilipp_Reitter hat folgendes geschrieben:
ich denk ich lass dann einfach zum schluss wenn ich die strings in ne datei schreibe einfach das aussortieren lasse indem ich einfach so in etwa sag:


Ach...?! Und bis dahin - also bis zum "Schluss" - ist es egal, ob die Liste doppelte Einträge hat?
Wofür dient denn dein Programm?

Das Auslesen einer String-Liste dauert übrigens in etwa gleich lange wie das Auslesen eines String-Arrays.