【Perl】シュワルツ変換のメモ
Perlでコーディングしてたら「シュワルツ変換」の書き方を思い出せなかったのでメモしておきます。
シュワルツ変換の例
下記はWikipediaに掲載されているコード例です。
@sorted = map { $_->[0] }
sort { $a->[1] cmp $b->[1] or $a->[0] cmp $b->[0] }
map { [ $_, length($_) ] }
@unsorted;
やってる処理は元の配列(@unsorted)に入ってる文字列の長さで比較して、長さが同じなら文字列で比較、並び替えができた配列(@sorted)を得ています。
この処理の利点は複雑なソートをする際に、一時的な配列を用意しなくて良いことです。
処理は下から見る
シュワルツ変換は下の行から読んでいくことになります。
- 4行目、文字列が入っている並び替え前の配列(@unsorted)を3行目のmapに渡している。
- 3行目、無名配列([])に配列に入ってる文字列と、length関数で得た文字列の長さを格納する。
- 2行目、無名配列の1番目の文字列の長さで比較、長さが同じなら無名配列の0番目に入っている文字列で比較する。
- 1行目、無名配列の0番目に入っている文字列を、結果の配列(@sorted)に入れる。
並び替え前の配列を残す必要が無ければ、@unsorted = map { … } sort { … } map { … } @unsortedとしても良い。
またすぐに忘れる
書き方を忘れても「シュワルツ変換」という言葉だけを覚えていれば、検索して書き方を思い出せる。「シュワルツ変換」という言葉は忘れないように。
ディスカッション
コメント一覧
まだ、コメントがありません