2009-10-06 7 views

Répondre

6

devrait être quelque chose comme:

employees sortBy: [:a :b | a lastName > b lastName] 
5

Si nous faisons ces hypothèses:

  1. L'instance Array est maintenu dans une variable nommée employés
  2. Le tableau contient une collection d'instances que tous répondent au message lastName en renvoyant une instance de chaîne
  3. Vous voulez trier la collection dans l'ordre croissant

Ensuite, vous pouvez faire le travail avec le fragment de code suivant:

employees asSortedCollection: [ :a :b | a lastName < b lastName ] 

Ce code envoie le asSortedCollection: message mot-clé à l'instance Array nommé employés. Il passe dans l'instance de bloc, délimitée par les crochets, en tant que paramètre de ce mot-clé. Le bloc passé a deux arguments qui sont nommés un et b et sont marqués par le caractère deux-points précédent tous les | personnage. Le code dans le bloc après le | caractère sera ensuite utilisé pour trier tous les éléments de employés Array et les ajouter à une nouvelle instance de la classe SortedCollection.

Notez, cependant, que ce code finit par renvoyer une nouvelle collection qui contient les mêmes éléments également détenus par employés, mais maintenant dans l'ordre souhaité. En fait, cette nouvelle collection conserve les critères de tri (l'instance de bloc utilisée comme paramètre du message asSortedCollection:) et, à mesure que vous ajouterez d'autres instances à cette collection, elles seront automatiquement insérées dans le bon tri. commande.