Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Brauche Bitte Erklärung für Sortierbefehl! (https://www.delphipraxis.net/127168-brauche-bitte-erklaerung-fuer-sortierbefehl.html)

Molzer 8. Jan 2009 19:29


Brauche Bitte Erklärung für Sortierbefehl!
 
Hallo !!

Hab hier einen Text und verstehe leider ein paar Zeilen nicht


Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  i: Integer;
  j: Integer;
  temp:string;
begin
for i := 0 to memo1.Lines.Count - 1 do //warum -1, er nimmt für i die erste zahl und für j
                                       // die zweite, tauscht sie aus wenn nötig
for j := i to memo1.Lines.Count - 1 do //und das solange bis j>i, warum -1???
begin
  if memo1.Lines[i]>memo1.Lines[j] then
  begin
    temp:=memo1.lines[i];
    memo1.Lines[i]:=memo1.lines[j];
    memo1.Lines[j]:=temp;

fkerber 8. Jan 2009 19:32

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Hi!

Das -1 kommt daher, da ab 0 angefangen wird zu zählen. Hat das Memo 4 Zeilen, so haben sie die Zeilennummern 0,1,2 und 3.
Memo1.Lines.Count gibt aber 4 zurück (es sind ja 4 Zeilen), also muss man von 0 bis 3 (eben genau 4-1) gehen.


Ciao, Frederic

Molzer 8. Jan 2009 19:39

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
alles klar!!
danke!!

Matze 8. Jan 2009 20:20

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Hallo,

aber würde es nicht reichen, "i" bis "Memo1.Lines.Count - 2" laufen zu lassen und j bei i+1 beginnen zu lassen?
Es wird doch immer die aktuelle Zahl (Index i) mit den darauf folgenden (Index i+1, i+2, ...) verglichen. Im letzten Durchlauf wird dann doch die letzte Zahl mit sich selbst verglichen und im ersten ebenfalls.

Oder habe ich einen Denkfehler?

Grüße, Matze

Uwe Raabe 8. Jan 2009 21:13

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Zitat:

Zitat von Matze
Oder habe ich einen Denkfehler?

Nein, da hast du vollkommen Recht.

Aber man kann das Ganze auch so lösen:

Delphi-Quellcode:
var
  temp: TStringList;
begin
  temp := TStringList.Create;
  try
    temp.Assign(memo1.Lines);
    temp.Sort;
    memo1.lines := temp;
  finally
    temp.Free;
  end;
end;

inherited 8. Jan 2009 22:24

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Delphi-Quellcode:
if memo1.Lines[i]>memo1.Lines[j] then
Und das soll funktionieren? :gruebel:

Neutral General 8. Jan 2009 22:27

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Zitat:

Zitat von inherited
Delphi-Quellcode:
if memo1.Lines[i]>memo1.Lines[j] then
Und das soll funktionieren? :gruebel:

Ja das funktioniert. Anfangs hab ich auch groß geguckt als ich es das erste mal versucht hab und es funktioniert hat :mrgreen:

inherited 8. Jan 2009 22:54

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Is ja Wahnsinn :shock:
Man lernt doch immer noch dazu

Sir Rufo 9. Jan 2009 00:37

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Andersherum, warum solte es nicht?

TMemo.Lines ist vom Typ TStrings, und das ist wie folgt definiert:

Delphi-Quellcode:
TStrings = class(TPersistent)
  private
    ...
  public
    ...
    property Strings[Index: Integer]: string read Get write Put; default; // <-- das Zauberwort
    ...
  end;
Das Zauberwort ist default. Darum verweist in dem Beispiel Memo1.Lines[ i ] direkt auf einen String und den kann ich natürlich so vergleichen ;)

inherited 9. Jan 2009 18:33

Re: Brauche Bitte Erklärung für Sortierbefehl!
 
Das mit dem default war mir klar. Was mir neu war, waren die Stringvergleiche auf >, <


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz