Delphi-PRAXiS

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 Listen vergleichen (https://www.delphipraxis.net/93143-listen-vergleichen.html)

napsterxx 1. Jun 2007 11:51


Listen vergleichen
 
So leutz,
Listen Problem. Ich habe 3 Listboxen. In der einen Stehen Verschiedene Namen : Thorsten, Christop ... ! in einer anderen stehen ebenfalls Namen: Thorsten, Christop, Sabine .... Ich möchte nun das verglichenwird, welche Einträge sowohl in der ersten als auch in der zweiten Listbox vorhanden sind. und diese Einträge sollen dann in die dritte Listbox gepackt werden. Wie geht das. Angefangen habe ich so:

Delphi-Quellcode:
for Int := 0 to Form1.ListBox2.Items.Count-1 do
 Form1.Listbox2.ITems.IndexOf()
Bis mir klar wurde:

Junge so geht das irgendwie nicht. Deshalb frage ich jetzt hier ;)

Klaus01 1. Jun 2007 11:58

Re: Listen vergleichen
 
Das könnte ich mir so vorstellen:

Delphi-Quellcode:
for i:=0 to Listbox1.items.cont -1 do
  begin
    gefunden:=false;
    for j:=0 to Listbox2.items.count -1 do
      begin
        if Listbox1.items[i] = Listbox2.items[j] then
          gefunden:=true;
      end;
    if gefunden then
      // copy listbox1.items[i] -> listbox3
  end;
oder
Delphi-Quellcode:
for i:=0 to Listbox1.items.count -1 do
  if listbox2.items.indexof(Listbox1.items[i]) > -1 then
    // add listbox1.items[i] -> listbox3
Grüße
Klaus

chrisw 1. Jun 2007 12:03

Re: Listen vergleichen
 
Ich denke so:
Delphi-Quellcode:
for i := 0 to ListBox1.Count -1 do
  if ListBox2.Items.IndexOf(ListBox1.Items[i]) <> -1 then ListBox3.Items.Add(ListBox1.Items[i]);

napsterxx 1. Jun 2007 12:48

Re: Listen vergleichen
 
N1 Funtzt perfekt ;) THX

s-off 1. Jun 2007 12:49

Re: Listen vergleichen
 
Letzteres Beispiel ist wohl die performantere Lösung.

Edit: Hat sich dann wohl erledigt.

marabu 1. Jun 2007 12:53

Re: Listen vergleichen
 
Hallo,

ich würde versuchen die visuellen Aspekte außen vor zu lassen:

Delphi-Quellcode:
procedure IntersectStrings(sResult, s1, s2: TStrings);
var
  i: Integer;
begin
  sResult.BeginUpdate;
  sResult.Clear;
  for i := 0 to Pred(s1.Count) do
    if s2.IndexOf(s1[i]) >= 0 then
      sResult.Add(s1[i]);
  sResult.EndUpdate;
end;
Das ist die Vorgehensweise von Christian, nur dass sie keine Referenz auf visuelle Komponenten mehr enthält. Man kann dann so mit sortierten oder Hash-Listen Performanzgewinne realisieren.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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