Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Seltsames Verhalten von IndexOf bei sortierter generischer Liste (https://www.delphipraxis.net/173396-seltsames-verhalten-von-indexof-bei-sortierter-generischer-liste.html)

Elvis 22. Feb 2013 13:39

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste
 
Zitat:

Zitat von Stevie (Beitrag 1204767)
Generell würde ich aber empfehlen, in den Vergleich die ID mit aufzunehmen. Dann kannst du den Comparer beim Create schon übergeben.

Aber nur wenn der Vergleich auch als Identifikation Sinn macht.
Extra den Zeiger auf die Instanz selbst mit reinzufriemeln ist ein gutes Zeiches, dass das nicht der Fall ist...

Furtbichler 22. Feb 2013 15:03

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste
 
Zitat:

Zitat von Sir Rufo (Beitrag 1204732)
Aber ich erwarte eben von einer Liste, dass ich mit
Delphi-Quellcode:
IndexOf
den Index des Elements in der Liste bekomme,

Du wusstest nicht, das der 'Comparer' auch für die Definition von 'Gleichheit' verwendet wird.

Ich halte das für einen Designfehler, und ich glaube, Du auch. Denn ein *TComparer* vergleicht nur und wird für das Sortieren verwendet.

In einer TSortedObjectList (wenn es das gäbe), würde IndexOf (weil mit Binärsuche implementiert) allerdings den Comparer verwendetn. Vielleicht wurde das deshalb so umgesetzt.


Nur mal so: Der Comparer definiert eine Ordnung und man muss sich einfach auch überlegen, wann zwei Objekte gleich, d.h. identisch sind.
Identisch bedeutet auch 'austauschbar', und dann reicht die erste Implementierung eben nicht aus.

BUG 22. Feb 2013 17:01

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste
 
Zitat:

Zitat von Furtbichler (Beitrag 1204780)
Ich halte das für einen Designfehler, und ich glaube, Du auch. Denn ein *TComparer* vergleicht nur und wird für das Sortieren verwendet.

Ich glaube bei Strings würdest du es wieder nicht für einen Designfehler halten :wink:
Den Comperator zu verwenden ist der universellere Ansatz. Eigentlich fehlt dem Ding in diesem Fall ein Rückgabewert für "nicht vergleichbar".

Am wichtigsten ist imho, das so etwas gut dokumentiert ist. Das scheint es nicht zu sein*

* OK, dass ist für viele Bibliotheken wohl ein Wunschtraum. Soll also kein Bashing werden :mrgreen:

Sir Rufo 22. Feb 2013 17:52

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste
 
Zitat:

Zitat von Elvis (Beitrag 1204756)
Zitat:

Zitat von Sir Rufo (Beitrag 1204754)
Wenn das bei einer generischen Liste gehen würde ... :roll:

In meinem D2010 gates.

I'm very sorry ... geht auch hier ... :oops:
(wieso habe ich nur im Kopf gehabt, dass das nicht geht ... seltsam)

Zitat:

Zitat von BUG (Beitrag 1204792)
Zitat:

Zitat von Furtbichler (Beitrag 1204780)
Ich halte das für einen Designfehler, und ich glaube, Du auch. Denn ein *TComparer* vergleicht nur und wird für das Sortieren verwendet.

Ich glaube bei Strings würdest du es wieder nicht für einen Designfehler halten :wink:
Den Comperator zu verwenden ist der universellere Ansatz. Eigentlich fehlt dem Ding in diesem Fall ein Rückgabewert für "nicht vergleichbar".

Am wichtigsten ist imho, das so etwas gut dokumentiert ist. Das scheint es nicht zu sein*

* OK, dass ist für viele Bibliotheken wohl ein Wunschtraum. Soll also kein Bashing werden :mrgreen:

Nun ja, der Standard Comparer vergleicht einfach nur den Pointer-Wert ... da wäre es auch nicht tragisch, wenn die gleiche Instanz auch immer den gleichen Index zurückliefest ...

Man muss es ja nur wissen, wie die Uhr drinnen tickt, dann fällt man auch nicht auf die Nase :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Seite 2 von 2     12   

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