3

従業員の配列がある場合、従業員の姓に基づいて並べ替えるにはどうすればよいですか?

4

2 に答える 2

6

次のようになります。

employees sortBy: [:a :b | a lastName > b lastName]
于 2009-10-07T00:09:57.167 に答える
6

これらの仮定を行うと:

  1. Array インスタンスは、 employeesという名前の変数に保持されます
  2. Array は、すべてが String インスタンスを返すことによってメッセージlastNameに応答するインスタンスのコレクションを保持します
  3. コレクションを昇順に並べ替えたい

次に、次のコード フラグメントを使用してジョブを完了できます。

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

このコードは、asSortedCollection:キーワード メッセージをemployeesという名前の Array インスタンスに送信します。これは、角括弧で区切られた Block インスタンスを、そのキーワード メッセージへのパラメーターとして渡します。渡されたブロックには、 abという名前の 2 つの引数があり、| の前にコロン文字でマークされています。キャラクター。| の後のブロック内のコード 文字は、従業員配列からすべての要素をソートし、SortedCollection クラスの新しいインスタンスに追加するために使用されます。

ただし、このコードは、employeesによって保持されているのと同じアイテムを保持する新しいコレクションを最終的に返すことに注意してください。ただし、現在は目的の順序になっています。実際、その新しいコレクションは並べ替え基準 ( asSortedCollection:メッセージのパラメーターとして使用された Block インスタンス) を保持し、今後そのコレクションにインスタンスを追加すると、正しい並べ替え順序で自動的に挿入されます。

于 2009-10-31T01:02:39.950 に答える