Avatar billede agg-zeus Nybegynder
10. november 2003 - 10:07 Der er 13 kommentarer og
1 løsning

Nemmest at sortere listboks eller array ?

Jeg skal enten have sorteret mit array inden det sættes ind i en listboks eller også skal det først sorteres i listboksen.
Hvad er nemmest ?
Og hvordan gør man ?
Jeg skal sortere en variabel som er integer, og det største tal skal øverst!
Avatar billede snowball Novice
10. november 2003 - 10:20 #1
function SortListBox(List: TStringList; Index1, Index2: Integer): Integer;
var
  D1, D2: Integer;
begin
  D1 := StrToInt(List[Index1]);
  D2 := StrToInt(List[Index2]);
  If D1 < D2 Then
    Result := 1
  Else If D1 > D2 Then
    Result := -1
  Else
    Result := 0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  SL: TStringList;
begin
  ListBox2.Items.Add('3');
  ListBox2.Items.Add('1');
  ListBox2.Items.Add('34');
  ListBox2.Items.Add('63');
  ListBox2.Items.Add('355');
  ListBox2.Items.Add('7');
  ListBox2.Items.Add('10');
  ListBox2.Items.Add('55');

  SL := TStringList.Create;
  Try
    SL.Assign(ListBox2.Items);
    SL.CustomSort(SortListBox);
    ListBox2.Items.Assign(SL);
  Finally
    SL.Free
  End;
end;

Snowball
Avatar billede snowball Novice
10. november 2003 - 10:23 #2
Hvis du vil have det mindste tal til at stå øverst, så lav SortListBox om til nedenstående:

  If D1 < D2 Then
    Result := -1
  Else If D1 > D2 Then
    Result := 1
  Else
    Result := 0;

Snowball
Avatar billede x-masman Nybegynder
10. november 2003 - 11:17 #3
Eller også sætter du bare Sorted til true i din listbox
Avatar billede snowball Novice
10. november 2003 - 11:19 #4
x-masman: Har du prøvet den !? Den virker meget dårlig da den er beregnet til at sortere alfabetisk og ikke til tal, så den sortere kun på første tegn i tallet og ikke hele tallet som helhed ;)

Snowball
Avatar billede x-masman Nybegynder
10. november 2003 - 12:48 #5
hi hi. ok.
Avatar billede razersedge Nybegynder
10. november 2003 - 16:15 #6
Denne procedure virker, hvis du skal have ændret rækkefølgen skal du bare vendre "krokodille-næbbet" :)

procedure SortListBox;
var
  Finished : Boolean;
  I : Integer;
begin
  repeat
      Finished := True;
      For I:=1 to Form1.ListBox1.Count-1 do
      begin
          If (StrToInt(Form1.ListBox1.Items.Strings[I]) > StrToInt(Form1.ListBox1.Items.Strings[I-1])) then
          begin
              Form1.ListBox1.Items.Move(I,I-1);
              Finished := False;
              break;
          end;
      end;
  until (Finished);
end;
Avatar billede agg-zeus Nybegynder
11. november 2003 - 19:59 #7
razersedge >> hvordan får jeg den så til at bruge denne procedure ?
Avatar billede agg-zeus Nybegynder
11. november 2003 - 19:59 #8
glem det.. sætter det jo bare ind i en anden.. :s
Avatar billede razersedge Nybegynder
11. november 2003 - 20:03 #9
Du kalder bare:

SortListBox;
Avatar billede agg-zeus Nybegynder
11. november 2003 - 20:05 #10
takker razersedge.. du får point da din løste mit problem bedst...
Avatar billede snowball Novice
11. november 2003 - 20:14 #11
agg-zeus: Jeg har meget svært ved at hvordan razersedge's svar løser dit problem "bedst", for resultatet er fuldstændig det samme som mit !?

Ser gerne en mere uddybende forklaring.

Snowball
Avatar billede razersedge Nybegynder
11. november 2003 - 22:02 #12
Snowball: Jeg skal med glæde give dig dine point. Sig til, så skal jeg oprette et spørgsmål.
Avatar billede snowball Novice
11. november 2003 - 22:34 #13
razersedge: Det behøver du skam ikke, ville bare gerne høre agg-zeus hvorfor han mener din løsning er bedre end min :)

Snowball
Avatar billede agg-zeus Nybegynder
12. november 2003 - 12:02 #14
fordi jeg skulle samtidig rykke værdierne op i en anden listbox når den rykkede dem i den listbox den sorterer i, og så synes jeg den var mere overskuelig for sådan en nybegynder som mig...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester