SORT BY ATTRIBUTE für Arrays aus Objekten

Hallo,
Datensätze können mit ORDER BY ATTRIBUTE nach Objektfeldern sortiert werden.
Für Arrays aus Objekten finde ich keinen vergleichbaren Befehl.

Übersehe ich etwas?

Mit freundlichen Grüßen

wie soll das gehen?
Ein Datensatz hat ein Array mit 1-5, ein anderer Datensatz ein Array mit 2-3
Welcher soll zuerst sortiert werden?
Gilt der niedrigste, der höchste oder der Durchschnitt?
Deshalb müssen Sie dazu eine Formel anlegen und nach Formel sortieren, automatisch kann das nicht (korrekt=wie gewünscht) funktionieren.

Hallo Herr Maul,
vielleicht konnte ich nicht verständlich machen was ich meine, daher hier ein etwas längerer Code (Copy&Paste aus Schnelligkeitsgründen).
Damit kann ich Datensätze aus Objekten nach Objektattributen sortieren. Auch wenn nicht alle Objekte alle Attribute der anderen Objekte enthalten. Ausnahme: das zu sortierende Attribut ist in allen Objekten gesetzt.
Also klappt das mit Datensätzen.

Aber wie kann ich ein identisches Verhalten mit dem Objekt-Array (im Beispiel $objs) erreichen?

Code :
C_OBJECT($obj)
ARRAY OBJECT($objs;0)

READ WRITE([TmpObjs])
ALL RECORDS([TmpObjs])
DELETE SELECTION([TmpObjs])

$obj:=New object
$obj.a:=1
$obj.b:=“a”
$obj.c:=“z”
APPEND TO ARRAY($objs;$obj)
CREATE RECORD([TmpObjs])
[TmpObjs]Obj:=$obj
SAVE RECORD([TmpObjs])
$obj:=New object
$obj.a:=2
//$obj.b:=“b”
$obj.c:=“y”
APPEND TO ARRAY($objs;$obj)
CREATE RECORD([TmpObjs])
[TmpObjs]Obj:=$obj
SAVE RECORD([TmpObjs])
$obj:=New object
$obj.a:=3
$obj.b:=“c”
//$obj.c:=“x”
APPEND TO ARRAY($objs;$obj)
CREATE RECORD([TmpObjs])
[TmpObjs]Obj:=$obj
SAVE RECORD([TmpObjs])

ALL RECORDS([TmpObjs])
ORDER BY ATTRIBUTE([TmpObjs]Obj;“a”;<)

Ich habe auch nach mehrfachen Lesen nicht verstanden welche Rolle das Array in dem Code spielt.
Habe den Code auch nachgebaut, bei mir wird richtig sortiert.

Oder wollen Sie wissen wie Sie ein Objekt Array sortieren können - und es hat mit Datensätzen gar nichts zu tun?

Dann:
Array Object ist veraltet. Verwenden Sie stattdessen Collections. Diese erzwingen die Nutzung der Dot Notation, die Sie aber sowieso verwenden.

Collections sind technisch gesehen Arrays vom Typ Objekt, aber viel leistungsfähiger (weil sie eine lose Sammlung sind, es müssen keine Objekte sein, es geht auch Text, Zahl, Object, Text).
Und es gibt viele Member Methods:
https://doc.4d.com/4Dv17R5/4D/17-R5/Collections.201-4127153.de.html

Auch das gesuchte .orderBy()

: Thomas MAUL

Array Object ist veraltet.

Sicherheitshalber, bevor ich wieder auf ein verkehrtes Pferd setze: bei den erweiterten Listbox-Funktionalitäten von 4D View Pro komme ich aber um Array Object nicht herum? D.h. die erweiterten Listbox-Funktionalitäten stehen in Collection Listboxen nicht zur Verfügung?

nicht ganz so.

Bei auf Arrays basierenden Listboxen kann man einer Spalte ein Array vom Typ ARRAY OBJECT zuweisen. Das ist dazu gedacht, gemäß einer ganz bestimmten “Syntax” in jedem Element cell controls zu implementieren. Das ist nun ein Spezialfall, um eine neue alternative Möglichkeit zu haben, in einer Listbox Oberfläche zu generieren.

Zum Beispiel für einen Einstellungsdialog, Druckdialog, …

Für solch einen Verwendungszweck stellt sich sicher nicht die Notwendigkeit, Berechnungen, Sortierungen oder sonstige Sachen mit den Inhalten zu machen. Eher so wie Öffnen, Klicken, fertig.

Der Thread hatte einen anderen Hintergrund, darauf bezog sich die Antwort von Herrn Maul.