AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Daten auf Einzigartigkeit überprüfen...
Thema durchsuchen
Ansicht
Themen-Optionen

Daten auf Einzigartigkeit überprüfen...

Ein Thema von Nelphin · begonnen am 13. Dez 2009 · letzter Beitrag vom 14. Dez 2009
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#1

Re: Daten auf Einzigartigkeit überprüfen...

  Alt 14. Dez 2009, 09:00
Es war gestern schon zu spät für ausführliche Erläuterungen, aber nun:

Das Problem mit der sortierten Stringliste ist, daß bei jedem Add die Inizes umsortiert werden können. Daher kann man den von Add zurückgegebenen Index auch nur bis zum nächsten Add gebrauchen.

Statt nur einfach einen String zu der Liste hinzuzufügen, geben ich diesem noch einen Referenzwert, den Index in der Originalliste, mit. Zu diesem Zweck missbrauche ich das Objects-Property der Stringliste, das eigentlich ein TObject hält, aber durch Typecasting auch Integer verkraftet. Der Vorteil der Objects ist, daß sie beim Umsortieren mitgeführt werden.

Bei dupIgnore wird ein bereits vorhandener String bei einem Add nicht in die Liste aufgenommen, insbesondere wird bei AddObject auch das zugehörige Objects-Property nicht geändert. Der nachfolgende Abruf liefert also für den gleichen String auch immer den gleichen Referenzwert zurück. Diesen speichere ich im Index-Array.

Nachdem alle Strings zugefügt wurden, stehen im Index-Array nun allerdings die Werte des jeweiligen Objects-Property des zugehörigen Strings und nicht wie gewünscht der Index in der optimierten Liste. Um dieses Manko zu beheben baue ich einen temporären inversen Index auf, der mir für jeden Referenzwert den zugehörigen Index in slopt liefert. Das geht recht schnell, da hierzu lediglich die slopt durchlaufen werden muss.

Mit diesem temporären Index übersetze ich dann die Einträge des Index-Array in die korrekten Werte.

Übrigens: lineare Laufzeit ist das auch nicht, aber O(n*log n) sollte es schon sein.
Uwe Raabe
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:05 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