Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objektliste sortieren und anschliessend anpassen (https://www.delphipraxis.net/130053-objektliste-sortieren-und-anschliessend-anpassen.html)

saltjohn2 2. Mär 2009 15:56


Objektliste sortieren und anschliessend anpassen
 
Hallo, habe ein Problem und komme nicht weiter. Ich habe eine Objektliste voller Instanzen gleicher Objektklassen.
Die Instanzen sind Telegramme mit den Atributen

Sendezeitpunkt, und ID

Die Sendezeitpunkte werden mit jedem Telegramm das zur Liste geadded wird um 7 erhöht.

Die Objektliste wird zur Laufzeit mit weiteren Telegrammen gefüllt. Wenn jedoch ein neues Telegramm zur Liste geadded werden soll, soll zunächst überprüft werden ob in der Liste schon Instanzen mit gleicher ID vorhanden sind. Wenn ja soll das Telegramm das in die Liste soll den Sendezeitpunkt des gefundenen Telegramms + 7 us bekommen. Die nachfolgenden Telegramme sollen dementsprechend angepasst werden indem die Sendezeiten auch um 7 us erhöht werden.

Hab schon einiges versucht aber leider komme ich nicht hin. Sobald in der Lsite mehr als ein Telegramm mit der gleichen Id vorkommt kommt es zu falschen Rechnungen.

himitsu 2. Mär 2009 16:03

Re: Objektliste sortieren und anschliessend anpassen
 
wie hast du das denn versucht?

in deinem Fall müßtest du erstmal das Objekt mit der ID und der größten Zeit raussuchen und dann von diesem ausgehn.

shmia 2. Mär 2009 17:22

Re: Objektliste sortieren und anschliessend anpassen
 
Zitat:

Zitat von saltjohn2
Wenn jedoch ein neues Telegramm zur Liste geadded werden soll, soll zunächst überprüft werden ob in der Liste schon Instanzen mit gleicher ID vorhanden sind. Wenn ja soll das Telegramm das in die Liste soll den Sendezeitpunkt des gefundenen Telegramms + 7 us bekommen. Die nachfolgenden Telegramme sollen dementsprechend angepasst werden indem die Sendezeiten auch um 7 us erhöht werden.

Für mich hört sich das völlig unlogisch an.
Wenn das Telegrammobjekt drei Properties hätte:
ID, Sendezeitpunkt und Position
und beim Einfügen in die Liste das Property Position automatisch gesetzt würde, dann würde es einen Sinn ergeben.

Liste vor dem Einfügen:
Code:
'A380', 8:20:15, 1
'A380', 8:21:45, 2
'B52', 9:12:00, 1
Nach dem Einfügen:
Code:
'A380', 8:20:15, 1
'A380', 8:21:45, 2
'B52', 9:12:00, 1
'A380', 8:25:30, 3    // das ist das eingefügte Objekt. Es hat autom. die Position 3 erhalten
Noch ist die Liste unsortiert, aber man kann leicht nach ID und Position sortieren.

SaltJohn 2. Mär 2009 17:46

Re: Objektliste sortieren und anschliessend anpassen
 
@Himitsu

also erstmal die Objektliste nach der Zeit aufsteigend sortieren
dann schauen ob ein Object mit gleicher ID vorhanden ist
wenn ja überprüfen ob es das einzige ist,
wenn mehrere dann das finden mit der größten Zeit,
dann die Zeit des neuen Objekts sowie die Zeiten der nachfolgenden Objekte anpassen

Weiß nicht genau ob das so richtig gedacht ist. Hab das Gefühl dass es zu umständlich ist.

@shmia fast genau so mein ich das. Allerdings müssen die Zeiten der nachfolgenden Objekte angepasst werden. Es gibt natürlich noch jede Menge andere Attribute. Eigentlich habe ich in jeder Instanz die beiden Attribute Host und Port die übereinstimmen müssen. Wollte es nur nicht noch komplizierter machen :)


Hier mal dein Beispiel angepasst.

Host Port t , rank
'A380', 21 , 7,2 , 1
'A380', 21 , 14,2 , 2
'B52', 6 , 28,2 , 1
'B747', 8 , 42,2 , 4
'B52', 6 , 35,2 , 3
'A380', 24 , 48,2 , 2
'A380', 21 , 21,2 , 2

Die Instanzen werde in der Anwendung erstellt. Wenn also eine Instanz in die Liste kommt, könnte sofort überprüft werden ob schon eine Instanz mit dem gleichen Host/Port vorhanden ist.

saltjohn2 3. Mär 2009 08:10

Re: Objektliste sortieren und anschliessend anpassen
 
Hier das ganze nochmal etwas deutlicher

Delphi-Quellcode:
Aktuelle Liste:           Kommt dazu:
21 , 7   , 1                       6, 55 , 8         
21 , 14  , 2 
6  , 28  , 4 
8  , 42  , 6 
6  , 35  , 5 
24 , 49  , 7 
21 , 21  , 3 

Neue Liste:
21 , 7   , 1                       
21 , 14  , 2 
6  , 28  , 4 
8  , 49  , 7 
6  , 35  , 5 
24 , 56  , 8 
21 , 21  , 3
6  , 42  , 6

Blup 3. Mär 2009 09:56

Re: Objektliste sortieren und anschliessend anpassen
 
Der Ablauf sollte nach deiner Beschreibung und den Beispieldaten im Prinzip so aussehen:
Code:
- finde alle Telegramme mit der selben ID
- wähle davon das Telegramm mit dem höchsten Zeitpunkt

- wenn ein Telegramm gefunden wurde:
begin
  - erhöhe bei allen Telegrammen die einen höheren Zeitpunkt haben den Zeitpunkt um 7 
  - füge das neue Telegramm mit dem Zeitpunkt des gefundenen Telegramms + 7 ein
end
else
begin
  - finde das Telegramm mit dem höchsten Zeitpunkt
  - wenn ein Telegramm gefunden wurde:
  begin
    -füge das neue Telegramm mit dem Zeitpunkt des gefundenen Telegramms + 7 ein
  end
  else
  begin
    -füge das neue Telegramm mit dem Zeitpunkt 7 ein
  end
end
Ob das Gesamtkonzept sinnvoll ist, bezweifle ich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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