Smalltalk: Sortieren einer Sammlung nach zwei Kriterien

8

Wie kann ich eine Sammlung in Cincom VisualWorks nach zwei Kriterien sortieren?

Beispiel: Ich habe eine OrderedCollection, die Personen enthält, und möchte eine neue Sammlung, die die Personen zuerst nach Alter sortiert, und dann, wenn das Alter gleich ist, die Personen nach Namen sortieren.

Ich hoffe du kannst mein Englisch verstehen! Danke ..

    
dobleseis 20.11.2011, 21:21
quelle

4 Antworten

8

Seans Code ist in Ordnung, aber ich bevorzuge es auf diese Weise geschrieben, was eher aufschlussreich und etwas effizienter ist:

%Vor%

Die Idee ist, dass der Sortierblock true antworten soll, wenn der Gegenstand a vor dem Gegenstand b sortiert ist. Bei zwei zu bearbeitenden Schlüsseln wird ein Element vor einem anderen Element sortiert, wenn entweder sein Primärschlüssel ( age ) kleiner ist, oder der Primärschlüssel derselbe ist, und der sekundäre Schlüssel ( name ) ist kleiner.

Dies übersetzt sich direkt in den obigen Code und kann leicht auf ein drittes oder mehrere Sortierkriterien erweitert werden (z. B. ist entweder der Sekundärschlüssel kleiner oder derselbe und der Tertiärschlüssel ist kleiner).

    
Bert Freudenberg 21.11.2011, 10:05
quelle
9

Travis Griggs hat eine interessante Art und Weise implementiert, diese Art von Art in einer viel prägnanteren Art zu tun. Er veröffentlichte seine Arbeit als TAG-SortFunctions im Cincom Public Repository, und ich glaube, dass es in die nächste Version von VisualWorks integriert wurde. Siehe seinen Blogbeitrag zum Thema und das Follow-up für Details. Mit diesem Paket schreiben Sie einfach so etwas (ungetestet):

Leute sortieren: #age sortUp, #name sortUp

    
Randy Coulman 21.11.2011 06:53
quelle
7
%Vor%     
Sean DeNigris 21.11.2011 02:11
quelle
6

Was Randy gesagt hat, aber es ist in VisualWorks 7.8 integriert und die Syntax wäre   aCollection asSortedCollection: #age aufsteigend, #name absteigend

wo Sie auch sort: oder irgend etwas anderes verwenden können, das einen sortBlock benötigt.

    
Alan Knight 21.11.2011 13:21
quelle