![]() |
AW: Sortierte TObjectList - Einträge richtig einfügen
Beeindruckend, aber vielleicht ein bisschen l'art pour l'art? Es gibt auch auch die Frage, warum der Rüde sich die Eier leckt, aber die wollen wir jetzt nicht weiter vertiefen.
Wenn mich nicht alles täuscht, dann ist das letzte Vexierspielchen ja auch keine binäre Suche mehr, sondern eine einfache Interation? Da der Abend hereinbricht, komme ich jetzt zu dem Schluss, dass mir die Lösungen aus #13 und #16 am einfachsten erscheinen, die #13 ist kürzer, die #16 wohl sauberer. Für mich wird es wohl (aber man weiß, Sir Rufos Trickkiste ist noch lange nicht leer) eine modifizierte Form werden:
Delphi-Quellcode:
So bekomme ich mit p auch das gefundene Element oder im Negativfalle die Einfügeposition zurück.
function TZielListe.SucheWert(const Wert:string;var P:Integer):Boolean;
var LItem:TZiel; begin LItem := TZiel.Create; try LItem.Wert := Wert; Result := BinarySearch( LItem, p, TComparer<TZiel>.Construct( function (const L, R: TZiel): Integer begin Result := AnsiCompareText(L.Wert,R.Wert); end )); finally LItem.Free; end; end; Eigentlich spricht auch nichts gegen die Dummy-Lösung, man spart sich das Create und Free und initialisert wegen des Compiler-Gemeckers einfach mit nil. |
AW: Sortierte TObjectList - Einträge richtig einfügen
In Delphi 2009 lösen diese Generics Pheromone bei mir aber eher einen sehr starken Fluchtinstinkt aus :)
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Dagegen würden Kritiker einwenden, dass du weder das Konzept von Pheromonen noch das von Generics verstanden hast. Bei beiden wird bei entsprechend veranlagten Individuen von einer extremen Anziehung ausgegangen. Der Aaskäfer dreht durch, wenn eine Aaskäferin ihre Moleküle verstreut, insbesondere, wenn sie gerade von einer gut durchmadeten Leiche kommt. Und der Delphianer ab D2009 ... Aber genug. Pheromone haben ihre Zielgruppe, und zu der muss man halt gehören. :wink:
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
Und das Konzept von Generics hab ich wohl ganz gut verstanden - es geht darum, dass sie in Delphi 2009 einfach grottenhaft verbuggt sind. Wir reden nochmal, wenn den Kritikern der Compiler das erste mal mit ner AV weggesegelt ist :) |
AW: Sortierte TObjectList - Einträge richtig einfügen
Oh je, es handelt sich also um Alarmpheromone.
Ich hab mich jetzt zu Folgendem entschlossen:
Delphi-Quellcode:
Jetzt hoffe ich mal, von den AV verschont zu bleiben.
function TZielListe.FindeWert(const Wert:string;var P:Integer):Boolean;
var L:TZiel; begin L := TZiel.Create; L.Wert := Wert; p := -1; try Result := BinarySearch(L, p, TComparer<TZiel>.Construct( function (const L, R: TZiel): Integer begin Result := AnsiCompareText(L.Wert,R.Wert); end)); Finally L.Free; end; end; function TZielListe.AddSorted(const Ziel: TZiel): Boolean; var P: Integer; begin Result := Assigned(Ziel) and (Ziel.Wert <> ''); If Result then begin FindeWert(Ziel.Wert,p); Result := (p > -1); If Result then Self.Insert(p,Ziel); end; end; |
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Wenn du mittlerweile mit XE7 arbeitest, solltest du deine Signatur aktualisieren. Die Bezeichnung "Schrott" für Delphi 2009 finde ich ärgerlich und sehr unangemessen. Und "freiwillig" ist bei Hobbyprogrammierern immer recht relativ.
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Moin allerseits, habe
![]()
Delphi-Quellcode:
Beim Compilieren erhalte ich im Constuctor von TFileListe diesen Fehler bei (Compare):
UNIT ServerLogFiles;
INTERFACE USES Windows, Classes, Messages, SysUtils, StrUtils, Generics.Collections, Generics.Defaults, Variants, LogFiles; // Klasse TLogFiles TYPE TFileListe = CLASS(Generics.Collections.TObjectList<TLogFiles>) PRIVATE Function Compare(Item1, Item2 : TLogFiles): Integer; PUBLIC Constructor Create(OwnsObjects : Boolean = true); END; TYPE TServerLogFiles = CLASS PRIVATE { Private-Deklarationen } FileList : TFileListe; ... END; IMPLEMENTATION { TFileListe } Function TFileListe.Compare(Item1, Item2 : TLogFiles): Integer; begin Result := TComparer<String>.Default.Compare(Item1.FileName, Item2.FileName); end; Constructor TFileListe.Create(OwnsObjects: Boolean); begin inherited Create(TComparer<TLogFiles>.Construct(Compare), OwnsObjects); // Fehler end; { TSERVERLOGFILES } ... end. ServerLogFiles.pas(96): E2010 Inkompatible Typen: 'TComparison<LogFiles.TLogFiles>' und 'Procedure of object' Was mache ich da falsch? |
AW: Sortierte TObjectList - Einträge richtig einfügen
Du hast das
Delphi-Quellcode:
vor
const
Delphi-Quellcode:
vergessen ;)
Item1, Item2
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Ach du große Schande ... hab ich's doch gleich geahnt, daß es mal wieder ein Flüchtigkeitsfehler sein muß :oops:
Danke für deine schnelle Hilfe :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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