AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Sortierte TObjectList - Einträge richtig einfügen

Sortierte TObjectList - Einträge richtig einfügen

Ein Thema von Benmik · begonnen am 17. Jul 2015 · letzter Beitrag vom 24. Sep 2015
Antwort Antwort
Seite 3 von 5     123 45   
Benmik

Registriert seit: 11. Apr 2009
532 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 17. Jul 2015, 19:18
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:
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;
So bekomme ich mit p auch das gefundene Element oder im Negativfalle die Einfügeposition zurück.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#22

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 17. Jul 2015, 19:33
In Delphi 2009 lösen diese Generics Pheromone bei mir aber eher einen sehr starken Fluchtinstinkt aus
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
532 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 17. Jul 2015, 19:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#24

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 17. Jul 2015, 19:57
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.
Eventuell sollten diese Kritiker nochmal die Definition von Pheromonen nachlesen - Anziehung ist nur eine Reaktion die sie auslösen können.
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (17. Jul 2015 um 20:00 Uhr)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
532 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 17. Jul 2015, 20:42
Oh je, es handelt sich also um Alarmpheromone.

Ich hab mich jetzt zu Folgendem entschlossen:
Delphi-Quellcode:
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;
Jetzt hoffe ich mal, von den AV verschont zu bleiben.

Geändert von Benmik (18. Jul 2015 um 17:51 Uhr) Grund: Kleine Code-Fehlerverbesserung
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.377 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 23. Jul 2015, 14:12
In Delphi 2009 lösen diese Generics Pheromone bei mir aber eher einen sehr starken Fluchtinstinkt aus
Also bei mir löst Delphi 2009 Fluchtinstinkt aus. Wie kann man nur freiwillig mit so einem "Schrott" arbeiten? Ich mit XE-7 habe in der Regel keine Probleme. (Außer wenn ich siebenfach verschachtele Genercis verwenden will)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
532 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 31. Jul 2015, 15:06
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#28

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 21. Sep 2015, 12:08
Moin allerseits, habe den Quellcode aus #9 in meinen zu integrieren versucht. Bei mir sieht das dann so aus:
Delphi-Quellcode:
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.
Beim Compilieren erhalte ich im Constuctor von TFileListe diesen Fehler bei (Compare):
ServerLogFiles.pas(96): E2010 Inkompatible Typen: 'TComparison<LogFiles.TLogFiles>' und 'Procedure of object'

Was mache ich da falsch?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 21. Sep 2015, 12:26
Du hast das const vor Item1, Item2 vergessen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#30

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 21. Sep 2015, 12:30
Ach du große Schande ... hab ich's doch gleich geahnt, daß es mal wieder ein Flüchtigkeitsfehler sein muß

Danke für deine schnelle Hilfe
  Mit Zitat antworten Zitat
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 · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 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