Smalltalk系列

use*_*514 3 sorting collections smalltalk

如果我有一系列员工,我如何根据员工的姓氏进行分类?

Chu*_*uck 6

应该是这样的:

employees sortBy: [:a :b | a lastName > b lastName]
Run Code Online (Sandbox Code Playgroud)


小智 6

如果我们做出这些假设:

  1. Array实例保存在名为employees的变量中
  2. Array包含一组实例,这些实例都通过返回String实例来响应消息lastName
  3. 您希望按升序对集合进行排序

然后,您可以使用以下代码片段完成工作:

 employees asSortedCollection: [ :a :b | a lastName < b lastName ]
Run Code Online (Sandbox Code Playgroud)

此代码将asSortedCollection:关键字消息发送到名为employees的Array实例.它将Block实例(由方括号分隔)作为该关键字消息的参数传递.传入的Block有两个名为ab的参数,并且在|之前都有前面的冒号字符标记 字符.|之后的块内的代码 然后,将使用character对employees数组中的所有元素进行排序,并将它们添加到SortedCollection类的新实例中.

但请注意,此代码最终返回一个新集合,该集合包含员工也持有的相同项目,但现在按所需顺序.实际上,新集合保留了排序条件(用作asSortedCollection:消息的参数的Block实例),并且当您将来向该集合添加更多实例时,它们将自动以正确的排序顺序插入.