AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi 2 Stringlisten vergleichen, geht es besser?

2 Stringlisten vergleichen, geht es besser?

Ein Thema von lucius · begonnen am 6. Dez 2005 · letzter Beitrag vom 7. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2   
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 17:04
Hallo Leute,

Brauche mal euere Meinung, also ich habe 3 Stringlisten, slBase, slTemp und slNeu, die werden als folgt
verarbeitet.
Delphi-Quellcode:
slBase := TStringList.Create;
....
slBase.LoadFromFile('C:\Test\Base.db'); //DBase mit allen Items Laden//
....
Delphi-Quellcode:
slNeu := TStringList.Create;
....
for i:=0 to simplerss.Items.count -1 do
  begin
  slNeu.Add(SimpleRSS.Items.Items[i].Title); //20 neue Items laden//
  end;
....
Delphi-Quellcode:
slTemp := TStringList.Create;
....
for j := 0 to slNeu.Count -1 do
  begin
  if not slBase.IndexOf(slNeu.Strings[j]) > -1 then //slNeu String nicht in slBase vorhanden?//
     slTemp.Add(slNeu.Strings[j]); //Dann String in slTemp einfuegen//
  end;
....
if slTemp.Text <> 'then //Wenn slTemp nicht leer ist//
    begin
      for k := slTemp.Count -1 downto 0 do
        begin
          slBase.Insert(0, slTemp.Strings[k]); //String in slBase einfuegen//
....
slBase.SaveToFile('c:\Test\Base.db');//Neue DBase speichern//
//////////////////////Alles freigeben///////////////////////////////////
slBase.Free;
slNeu.Free;
slTemp.Free;
Hiermit vergleiche ich also die StringListe(slBase) mit der StringListe(slNeu), jetzt meine Frage ist meine Vorgehensweise ok oder habt ihr Verbesserungsvorschlaege?
Dank im voraus.

MFG Lucius.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 17:13
Wenn du 2 Stringlisten hast, dann brauchst du nur die Mengenlehre anwenden.
Schnittmenge, Vereinigungsmenge, ...
Kuckst du in der Code-Library: http://www.delphipraxis.net/internal...ct.php?t=23230
Andreas
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 18:02
Ich werde mich das mal naeher anschauen shmia, Danke fuer den Hint.

Gruss Lucius.
  Mit Zitat antworten Zitat
marabu

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

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 18:48
Hallo Lucius,

der von dir gezeigte Code könnte auch so aussehen:

Delphi-Quellcode:
var
  i, iNew: integer;
  s, ss: TStrings;

begin

  // chronological list
  s := TStringList.Create;
  s.LoadFromFile(fileName);

  // alpha list
  ss := TStringList.Create;
  ss.Assign(s);
  TStringList(ss).Sorted := true; // edit: missing cast

  // count new items
  iNew := 0;
  for i := 0 to Pred(SimpleRSS.Items.Count) do
    // binary search
    if ss.IndexOf(SimpleRSS.Items[i].Title) = -1 then
    begin
      // add new item preserving order
      s.Insert(iNew, SimpleRSS.Items[i].Title);
      Inc(iNew);
    end;

  // ...
  s.SaveToFile(fileName);
  s.Free;
  ss.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 19:06
Hi,

insbesondere wenn du die Liste sortierst (was ich dir auch raten würde) solltest du es ruhig mit der THashedStringList versuchen. Ist natürlich auch von TStrings abgeleitet, aber um einiges Perfomanter (für solche Aufgaben) als eine "normale" TStringList

Gruß Der Unwissende
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 19:21
Hi marabu, schoener Code aber es gibt ein kleines Problem.
Er kennt ss.Sorted := true nicht.
Auch dir Der_Unwissende danke fuer dein Tip.

Gruss Lucius.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 19:22
Habs schon marabu,
Delphi-Quellcode:
var
ss : TStrings; //muss TStringList sein//
  Mit Zitat antworten Zitat
marabu

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

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 20:17
Sorry Lucius, wollte dich nicht ärgern.

Unwissender, es widerstrebt mir dich so zu addressieren, da ich schon einige gute Beiträge von dir gelesen habe. Die HashedStringList kann im vorliegenden Fall ihre Stärke nicht ausspielen. Bei 20 Zugriffen pro Durchlauf auf eine Liste mit einem item count von 1000 und einer Wachstumsrate von geschätzten 10 items pro Tag wächst die Zugriffszeit der Hash-Funktion um ein Vielfaches schneller als beim Binary Search (100:1 und schlechter). Wenn man die HashedStringList richtig einsetzt kann man viel Freude daran haben.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 21:09
@marabu Danke, mit deinem Absender ehrt mich ein solcher Kommentar (nichts gegen andere die das schon sagten), aber schon allein weil ich viel zu faul bin mir einen anderen Namen zu überlegen bleibe ich trotzdem bei diesem.
Ok, hätte wohl auf die Wachstumrate achten sollen.
Mit meinem Unwissenden Bonus stell ich jetzt aber mal die Frage ob du weißt wie THashedStringList intern arbeitet? (Gut, könnte in den Sourcen suchen) Wenn Delphi die THashedStringlist nur sinnvoll genug anlegt, dann ist dann muss das Feld selten neu angelegt werden und ein Key-Clash wird natürlich unwahrscheinlicher (mal schauen ob ich nicht doch meinen Namen zu Recht trage).

Aber natürlich geb' ich dir Recht, es lohnt sich nicht immer Hashes zu benutzen (und bei der Wachstumsrate, hm).

Gruß und frohen Nikolaus Der Unwissende
  Mit Zitat antworten Zitat
marabu

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

Re: 2 Stringlisten vergleichen, geht es besser?

  Alt 6. Dez 2005, 21:38
Die Macher der HashedStringList haben sich für 256 (fixed) Buckets (einfach verkettete Listen) entschieden, die Hash-Funktion schiebt die Zeichen des Schlüssels per XOR durch ein rotierendes 32-bit Register.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf