AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox vergleichen

Ein Thema von Uncle Cracker · begonnen am 31. Okt 2007 · letzter Beitrag vom 1. Nov 2007
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Listbox vergleichen

  Alt 1. Nov 2007, 11:39
Hallo,

als ich die Prozedur IntersectStrings() bereit stellte, habe ich auch auf die Bedeutung einer Sortierung hingewiesen. Auch die Aktualisierung der ListBox wird ja unterdrückt. Ein Test zeigt bei mir Zeiten (für Sortierung und Selektion) jeweils deutlich unter 100 Millisekunden.

Delphi-Quellcode:
function RandomStr(size: integer): string;
var
  i: integer;
begin
  SetLength(Result, size);
  for i := 1 to Length(Result) do
    Result[i] := Chr(Ord('A') + Random(26));
end;

procedure IntersectStrings(sResult, s1, s2: TStrings);
var
  i: Integer;
  s: string;
begin
  sResult.BeginUpdate;
  sResult.Clear;
  for i := 0 to Pred(s2.Count) do
  begin
    s := Copy(s2[i], 1, 7);
    if s1.IndexOf(s) >= 0 then
      sResult.Add(s);
  end;
  sResult.EndUpdate;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  s: TStringList;
  tc: Cardinal;
begin
  s := TStringList.Create;
  tc := GetTickCount;
  s.Assign(ListBox1.Items);
  ShowMessage(Format('assigned: %d', [GetTickCount - tc]));
  tc := GetTickCount;
  s.Sorted := True;
  ShowMessage(Format('sorted: %d', [GetTickCount - tc]));
  IntersectStrings(ListBox3.Items, s, ListBox2.Items);
  ShowMessage(Format('selected: %d', [GetTickCount - tc]));
  s.Free;
end;

procedure TDemoForm.FormCreate(Sender: TObject);
const
  CNT1 = 10000;
  CNT2 = 2000;
var
  i: Integer;
begin
  with ListBox1.Items do
  begin
    BeginUpdate;
    for i := 1 to CNT1 do
      Add(Format('%.2d-%.4d', [Random(100), Random(10000)]));
    EndUpdate;
  end;

  with ListBox2.Items do
  begin
    BeginUpdate;
    for i := 1 to CNT1 do
      Add(Format('%.2d-%.4d_%s', [Random(100), Random(10000), RandomStr(5)]));
    EndUpdate;
  end;
end;
Ich vermute, dass einfach nicht sortiert worden ist. Sortiert wird die große Liste und diese wird auch als zweiter Parameter übergeben. Die kleinere Liste wird als dritter Parameter übergeben und enthält die Einträge mit angehängtem String.

Grüße vom marabu
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz