Smalltalk系列

时间:2009-10-06 23:54:48

标签: sorting collections smalltalk

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

2 个答案:

答案 0 :(得分:6)

应该是这样的:

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

答案 1 :(得分:6)

如果我们做出这些假设:

  1. Array实例保存在名为 employees
  2. 的变量中
  3. Array通过返回String实例来保存所有响应消息 lastName 的实例集合
  4. 您希望按升序对集合进行排序
  5. 然后,您可以使用以下代码片段完成工作:

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

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

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