AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Seltsames Verhalten von IndexOf bei sortierter generischer Liste
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Verhalten von IndexOf bei sortierter generischer Liste

Ein Thema von Sir Rufo · begonnen am 22. Feb 2013 · letzter Beitrag vom 22. Feb 2013
Antwort Antwort
Seite 2 von 2     12   
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#11

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste

  Alt 22. Feb 2013, 14:39
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...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#12

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste

  Alt 22. Feb 2013, 16:03
Aber ich erwarte eben von einer Liste, dass ich mit 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.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#13

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste

  Alt 22. Feb 2013, 18:01
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
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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (22. Feb 2013 um 18:04 Uhr)
  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
 
#14

AW: Seltsames Verhalten von IndexOf bei sortierter generischer Liste

  Alt 22. Feb 2013, 18:52
Wenn das bei einer generischen Liste gehen würde ...
In meinem D2010 gates.
I'm very sorry ... geht auch hier ...
(wieso habe ich nur im Kopf gehabt, dass das nicht geht ... seltsam)

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
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
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
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
Antwort Antwort
Seite 2 von 2     12   


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 19:29 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