challenge データの整列

(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。

  • (x, y) の辞書順(まず x で昇順に整列して、x が同じデータに対して y で昇順に整列する)
  • (0, 0) からの距離の昇順

データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。

Posted feedbacks - Smalltalk

Squeak Smalltalk では、#asSortedCollection: をコールすることで、レシーバであるコレクションをソート済みコレクション(a SortedCollection)に変換できます。並び替えの条件は、引数として添えるブロック(無名関数)で与えます。

#r は、レシーバであるポイント(座標オブジェクト。x@y で生成)の原点(0@0)からの距離を返すメソッドです。

1
2
3
4
5
6
7
8
| points |
points := (1 to: 10) collect: [:each | 10 atRandom @ 10 atRandom].
^{  points asSortedCollection: [:a :b | a x < b x or: [a x = b x and: [a y < b y]]].
    points asSortedCollection: [:a :b | a r < b r]}

"=> an Array(
    a SortedCollection(2@4 2@8 3@2 3@6 4@9 6@10 8@1 8@1 10@6 10@10)
    a SortedCollection(3@2 2@4 3@6 8@1 8@1 2@8 4@9 10@6 6@10 10@10)) "

Index

Feed

Other

Link

Pathtraq

loading...