Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String in TObjectList suchen (https://www.delphipraxis.net/182701-string-tobjectlist-suchen.html)

DeddyH 12. Nov 2014 10:06

AW: String in TObjectList suchen
 
TObjectList enthält bereits eine Sort-Methode, da böte es sich ja an, diese zu benutzen. Aber selbst wenn nicht: was versuchst Du mit dem High() zu ermitteln, mir ist das nicht klar?

Blup 12. Nov 2014 10:12

AW: String in TObjectList suchen
 
Schau mal in die Hilfe zu "High()" und dann überleg was "High(List[List.Count - 1].iAnzahl)" deiner Meinung nach zurück gibt.

StepByStep 12. Nov 2014 10:33

AW: String in TObjectList suchen
 
@DeddyH: Da stimme ich dir zu, wenn die TObjectList bereits einen Sortieralgorithmus besitzt, werde ich diesen auch nehmen. Bis dato wusste ich davon aber noch nicht.

@DeddyH & Blup: Mit dem High(...) möchte ich sagen, dass er von Beginn der List bis zum höchsten Indexwert durchgeht und sortiert - naja, zumindest habe ich mir das gedacht.

DeddyH 12. Nov 2014 10:43

AW: String in TObjectList suchen
 
Schau doch bitte mal nach: High().

StepByStep 12. Nov 2014 10:49

AW: String in TObjectList suchen
 
Zitat:

In Delphi können Sie mit High die Obergrenze eines Ordinal-, Array- oder ShortString-Wertes abrufen.
Also wenn ich das jetzt richtig verstanden habe, dann kann man diese Funktion sowieso nicht auf TObjectList übertragen.
Wenn das so ist, würde ja sowie so dein Vorschlag bezüglich der integrierten Sortiermethode greifen DeddyH.

Ich glaube jetzt muss ich mich da erstmal reinlesen, danke für die Hilfe bis hierhin.

Gruß
Jan

DeddyH 12. Nov 2014 11:01

AW: String in TObjectList suchen
 
iAnzahl dürfte ja ein Ordinaltyp (Integer?) sein. Also gibt High(List[List.Count - 1].iAnzahl) immer denselben Wert zurück, nämlich den des maximal möglichen für den Typ von iAnzahl, im Falle von Integer also MAXINT.

StepByStep 12. Nov 2014 11:50

AW: String in TObjectList suchen
 
Ja das ist richtig, iAnzahl ist ein Integer. Ich wollte aber gar nicht den Maximalwert der Integers wiedergeben, sondern den der TOjectList. :gruebel:
Ich hatte mir jetzt mal, die Sortierfunktion der TObjectList angeschaut, diese ist aber gar nicht anders als meine, kann das sein?

Mein Problem liegt daran, dass ich nicht genau weiß, wie ich auf die Richtige "Spalte" der TObjectList zugreife, also auf iAnzahl und danach sortiere und das richtig ausgebe... :glaskugel:

Sir Rufo 12. Nov 2014 12:19

AW: String in TObjectList suchen
 
Warum nicht einfach einen
Delphi-Quellcode:
IComparer<T>
Delphi-Referenz durchsuchenSystem.Generics.Defaults.IComparer der Liste übergeben?

Dann kann man ganz simpel mit Delphi-Referenz durchsuchenSystem.Generics.Collections.TList.Contains abfragen ob eine gleiche Instanz schon in der Liste enthalten ist.


DeddyH 12. Nov 2014 12:36

AW: String in TObjectList suchen
 
Die Sortierung an sich übernimmt die Liste selbst, Du musst nur die Vergleichsfunktion schreiben, die festlegt, wann ein Item "kleiner" als das andere ist. Diese Vergleichsfunktion kannst Du sogar beim Aufruf als anonyme Methode übergeben. Ungetestet:
Delphi-Quellcode:
List.Sort(TComparer<TWort>.Construct(
  function(const Left, Right: TWort): integer
  begin
    Result := Left.iAnzahl - Right.iAnzahl;
  end));
Für TComparer musst Du noch die Unit Generics.Defaults einbinden.

StepByStep 12. Nov 2014 12:56

AW: String in TObjectList suchen
 
Also das Vergleichen habe ich ja bereits mit DeddyH's Methode erfolgreich lösen können, die habe ich für meine Belange umgewandelt und integriert.
Einzig diese Sortierfunktion steht mir im Wege. Wobei ich glaube, dass es weniger die Funktion, als mein Verständnis dafür ist. :wall:

Zitat:

Die Sortierung an sich übernimmt die Liste selbst, Du musst nur die Vergleichsfunktion schreiben, die festlegt, wann ein Item "kleiner" als das andere ist. Diese Vergleichsfunktion kannst Du sogar beim Aufruf als anonyme Methode übergeben. Ungetestet:
markieren
Delphi-Quellcode:
List.Sort(TComparer<TWort>.Construct(
function(const Left, Right: TWort): integer
begin
Result := Left.iAnzahl - Right.iAnzahl;
end));
Für TComparer musst Du noch die Unit Generics.Defaults einbinden.
Wenn ich mir das so anschaue, würde ich gerne mal meine Gedanken dazu mitteilen und es wäre nett, wenn ihr sie ggf. berichtigt.
Ich habe eine Funktion mit zwei Variablen? des Typs TWort. Der Rückgabewert ist ein Integer.
Die Rechnung besagt: Links weniger rechts. Bsp.: 4, 9 - Dann sollte jetzt 9 mit 4 getauscht werden. Result = 5.

Aber was bringt mir dieses Result? Ich möchte im Enddefekt die nach der Anzahl sortierte Liste in einem weiteren Memofeld ausgeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
Seite 2 von 4     12 34      

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