AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi schnellere Alternative zu StringListe.IndexOf() gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

schnellere Alternative zu StringListe.IndexOf() gesucht

Ein Thema von Helmi · begonnen am 25. Mai 2010 · letzter Beitrag vom 26. Mai 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#11

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 25. Mai 2010, 22:09
Danke!

Werd ich morgen mal ausprobieren!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 25. Mai 2010, 22:10
Habe ich was überlesen, oder wurde sortiert einfügen noch nicht vorgeschlagen? Ein schlanker Binary-Search vorm Einfügen erschlägt 2 Fliegen mit einer Klappe: Entweder wird der Eintrag gefunden (-> Duplikat), oder du bekommst gleich den Index zurück, an dem einzufügen ist um die Liste sortiert zu halten, was nachfolgende binäre Suchen möglich macht.

Edit: Und das ganze mit einer Worst-Case Komplexität von O(log(n)) pro Eintragungsversuch.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 06:48
Zitat von Medium:
Habe ich was überlesen, oder wurde sortiert einfügen noch nicht vorgeschlagen?
Delphi-Quellcode:
StringList.Sorted := True;
StringList.Duplicates := dupIgnore;
erfüllt den gleichen Zweck. Er will aber nach seinen eigenen Regeln sortieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#14

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 06:57
Wurde mehrfach vorgeschlagen, aber wollte er erst nicht nehmen, weil er seine Liste nicht extra zweimal umsortieren wollte, da sie schon "anders" sortiert ist (CustomSort).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 07:47
Okay, dann ist mir entgangen, dass die ursprüngliche Sortierung beibehalten werden muss. Scusi
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
535 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 10:47
Wie ist es, wenn man die immerhin 6000 Strings in einem Clientdataset speichert ? Dann könnte man dies indizieren und mit Locate suchen.

Könnte schneller sein, sicher bin ich mir aber nicht.

Gruß

Ralf
Ralf
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#17

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 18:26
bei 6000 Zeilen lohnt sich schon ne kleine Datenbank. Access z.B. wird sich darin viel viel schneller zurecht finden als du mit Delphi und Stringvergleichen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#18

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 18:46
Und wie groß wäre der Aufwand den Stringlisteninhalt in die DB und nach den Einfügeaktionen wieder da rauszuholen, wenn es doch reichen würde der Stringliste einfach nur das gewünschte Sortierverfahren beizubringen, welches dann die schnelleren Suchfunktionen der Stringliste nutzbar macht?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#19

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 18:59
6000 Strings sind doch ruckizucki da rein-SQL-t. Das muss ja wenn überhaupt nur ein Mal gemacht werden, und auch nur, wenn schon eine bestehende Liste übernommen werden muss. Die Einfügeoperation pro weiterem String dürfte durch die optimierten Suchstrategien in den meisten DBMS sehr schnell aufgewogen, und ab einem gewissen Punkt unterboten werden. Die Idee ist nicht wirklich schlecht, auch wenn es im ersten Moment wie Kanone->Spatz anmutet.

Edit: Vor allem besticht der geringe Implementierungsaufwand durch Benutzung bestehender Dinge sehr.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#20

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 26. Mai 2010, 19:41
Hallo,

danke für die Antworten!
Aber eine Datenbank find ich dafür ein wenig übertrieben.

Ich versuche jetzt gerade himitsu´s Vorschlag in die Tat umzusetzen, aber ich scheitere an der Vergleichs-function.


Zitat von himitsu:
ach so ist das

nja, dann laß die Liste doch gleich richtig sortieren?
Delphi-Quellcode:
type
  TNaturalStringList = class(TStringList)
  protected
    function CompareStrings(const S1, S2: string): Integer; override;
  public
    constructor Create;
  end;

function TNaturalStringList.CompareStrings(const S1, S2: string): Integer;
begin
  Result := YourNaturalCompare(S1, S2);
  // also der Vergleich aus deinem Compare_NaturalSort
end;

constructor TNaturalStringList.Create;
begin
  Sorted := True;
  Duplicates := dupIgnore;
end;
Delphi-Quellcode:
var StringList_MN: TStringList; // oder TStrings oder was auch immer

StringList_MN := TNaturalStringList.Create;

{...}

StringList_MN.Add(S);

{...}
Ich kann gerade nichts mit der function
function TNaturalStringList.CompareStrings(const S1, S2: string): Integer; anfangen.

Momentan ruf ich so eine Sortierroutine so auf:
    StringList_MN.CustomSort(Compare_NaturalSort); Wobei "Compare_NaturalSort" so
Delphi-Quellcode:
function Compare_NaturalSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
  //Natürlich sortieren (Nummern aufsteigend)
  //benötigt "StrNatComp.pas"
  Result := StrNatCompare(List[Index1], List[Index2]);
end;
ausschaut. Und nun weiss ich leider nicht wie ich das in die obere function einfügen soll.
(Ich muss dazusagen, dass die Sortierroutine nicht von mir ist, sondern aus dem I-Netz)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:56 Uhr.
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