2011年11月20日

F#:どう書く?org - データの整列(ソート)

  
どう書くorg?の 「データの整列」をF#で書いてみました。

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

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

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

適当に選んでください、とのことなので、タプルを選択して書いてみました。


sortByLexicalOrder 関数が、辞書順にソートする関数。
sortByDistance関数が、距離の昇順でソートする関数です。
sortByLexicalOrderは、LINQを使ってかいてみました。

C#では引数の型を指定するのは当たり前で、全然苦にならないですが、
F#だと、ものすごく面倒に感じるのはなぜなんでしょうか?
単に、F#に慣れていないせいだとは思いますが。。。

sortByLexicalOrder 関数は、以下のように書く事もできますね。

---------
追記 11/23

sortByLexicalOrdeは、以下のコードでOKでした。


ということは、わざわざ関数にするまでもないってことですね。


この記事へのコメント
タプルって元々、そういう風に比較されるから必要無いんじゃないでしょうか?
Posted by BLUEPIXY at 2011年11月21日 07:07
すみません。もう少し噛み砕いていただけると。。。
Posted by Gushwell at 2011年11月21日 22:11
つまりタプル(a,b)
は、a で比較されてからb で比較されるということなんですが。
Posted by BLUEPIXY at 2011年11月21日 22:48
なので、そのまま単にsortすればいい。
Posted by BLUEPIXY at 2011年11月21日 22:59
直接関係ない(相手側が悪い)けど
あと、リンク先が開けない。
辞書順なら、
11111 は、2 より小さい。
Posted by BLUEPIXY at 2011年11月21日 23:12
タプルってそんな比較ができるんですね。
今日は一つ勉強になりました。

辞書順という言葉の定義をきちんとしないと
結果が変わってきますね。
(まず x で昇順に整列して、x が同じデータに対して y で昇順に整列する)
とあるので、そこまで考えませんでした。
Posted by Gushwell at 2011年11月22日 21:46
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52206615