Коллекции Smalltalk - PullRequest
       11

Коллекции Smalltalk

3 голосов
/ 07 октября 2009

Если у меня есть массив сотрудников, как я могу отсортировать их по фамилии сотрудников?

Ответы [ 2 ]

6 голосов
/ 31 октября 2009

Если мы сделаем эти предположения:

  1. Экземпляр Array содержится в переменной с именем employee
  2. Массив содержит коллекцию экземпляров, которые все отвечают на сообщение lastName , возвращая экземпляр String
  3. Вы хотите отсортировать коллекцию в порядке возрастания

Тогда вы можете выполнить работу с помощью следующего фрагмента кода:

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

Этот код отправляет сообщение с ключевым словом asSortedCollection: в экземпляр массива с именем employee . Он передается в экземпляре Block, ограниченном квадратными скобками, в качестве параметра этого ключевого сообщения. Переданный блок имеет два аргумента с именами a и b и помечены предшествующим двоеточием перед символом | персонаж. Код в блоке после | Затем этот символ будет использоваться для сортировки всех элементов из массива employee и добавления их в новый экземпляр класса SortedCollection.

Обратите внимание, что этот код в конечном итоге возвращает новую коллекцию, содержащую те же элементы, которые также хранятся у сотрудников , но теперь в нужном порядке. Фактически, эта новая коллекция соответствует критериям сортировки (экземпляр Block, который использовался в качестве параметра для сообщения asSortedCollection: ), и по мере добавления новых экземпляров в эту коллекцию в будущем они будут автоматически вставлены. в правильном порядке сортировки.

6 голосов
/ 07 октября 2009

Должно быть что-то вроде:

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