Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 5):
ralf.wenzel • Icke0801 • tm987456 • SaskuAc • Legxis
Code: Alles auswählen.
REPORT.
CLASS xyz DEFINITION.
PUBLIC SECTION.
METHODS constructor IMPORTING name TYPE string.
DATA name TYPE string.
ENDCLASS.
CLASS xyz IMPLEMENTATION.
METHOD constructor.
me->name = name.
ENDMETHOD.
ENDCLASS.
TYPES ty TYPE SORTED TABLE OF REF TO xyz WITH UNIQUE KEY table_line.
DATA tab TYPE ty.
START-OF-SELECTION.
*TRY.
* DATA(obj) = tab[ table_line->name = 'HUGO' ].
* CATCH cx_sy_itab_line_not_found.
*ENDTRY.
tab = VALUE #( ( NEW #( 'HUGO' ) ) ).
READ TABLE tab
INTO DATA(line)
WITH KEY table_line->name = 'HUGO'.
IF sy-subrc = 0.
MESSAGE 'HUGO found' TYPE 'S'.
ENDIF.
Naja, überspitzt formuliert definierst du damit nur eine Tabelle in der man nicht zweimal dieselbe Objektinstanz einfügen kann. Einen optimierten Suchzugriff hat man so nur wenn man eine der Instanzen kennt. Also wenn man wissen möchte ob die Instanz schon vorhanden ist. Einen Schlüssel für den schnellen Zugriff auf die Attribute der Instanzen kann man damit nicht erreichen.ewx hat geschrieben: ↑06.11.2019 23:08Code: Alles auswählen.
TYPES ty TYPE SORTED TABLE OF REF TO xyz WITH UNIQUE KEY table_line.
Nicht so ganz. Der Schlüssel ist der Instanzzeiger (INT4?).ralf.wenzel hat geschrieben: ↑06.11.2019 23:48So kriege ich natürlich einen mörderbreiten Schlüssel mit allen Nachteilen dir das mit dich bringt.
Code: Alles auswählen.
TYPES ty TYPE STANDARD TABLE OF REF TO xyz WITH DEFAULT KEY.
DATA: instance_tab TYPE ty.
APPEND NEW #( ) TO instance_tab.
SORT instance_tab BY table_line->name.
READ TABLE instance_tab REFERENCE INTO DATA(instance) BINARY SEARCH
WITH KEY table_line->name = ''.
Was willst Du mit dem DEFAULT KEY, mit dem machst Du doch eh nix, sondern nutzt ganz andere Spalten als effektiven Suchschlüssel. Da wäre WITH EMPTY KEY ehrlicher.a-dead-trousers hat geschrieben:TYPES ty TYPE STANDARD TABLE OF REF TO xyz WITH DEFAULT KEY.
du kannst es auch nicht lassen, oder? 🙃DeathAndPain hat geschrieben: ↑07.11.2019 08:17Tja, das OO-Geraffel ist halt schön abstrakt, aber performancetechnisch ineffizient.
Code: Alles auswählen.
TYPE SORTED TABLE OF REF TO xyz WITH UNIQUE KEY table_line.
Code: Alles auswählen.
TYPE STANDARD TABLE OF REF TO xyz with EMPTY KEY.
Warum musst du die Tabelle bei jedem Zugriff umsortieren?ralf.wenzel hat geschrieben: ↑07.11.2019 08:04....was aber nicht das ist, was ich mir unter einem optimierten Zugriff vorstelle, weil man die Tabelle potentiell bei jedem Zugriff umsortieren muss.