- ベストアンサー
ソートのテクニックについて
お世話になります。 ソートのテクニックについて教えていただきたく質問しています。 ソートをするに、パタンが二つあると思います。 例示パタン1; 一人が5回の試技を行い、結果を記録したレコードがあり、 5回の試技を昇順に列べてからリストする。 レコード形式;名前、試技1、試技2、、、試技5、試技平均 例示パタン2; 一人が砲丸投げとやり投げを行い、結果を記録したレコードがあり、 砲丸投げと、やり投げ毎に記録の良い順にリストする。 レコード形式;名前、砲丸投げ記録、やり投げ記録 上記パタン1では、データを頭から読み出しながら試技をソートすれば良く、 ソートに要するスペース(メモリ?)は少なくて済む。 パタン2では、予め全レコードについてソートしてからリストする必要があるため、 スペースが要求されると思います。 ここで質問です。 パタン2のような場合、どのようなテクニックを使えばよいのでしょうか。 実際に動かしているのですが、パソコンでは問題なくても携帯電話で動かすと、 ”上限サイズを超えたので云々”とのエラーになります。 (シュワルツ変換というテクニックでソートしています。) @lines = map {$_->[0]} sort {$b->[11] <=> $a->[11] or $a->[1] <=> $b->[1]} map {[$_, split /<>/]} @lines; 上記の場合、メモリに蓄えられてソートがされると思います。 一度外に書き出すようなテクニックの方が良いのでしょうか。 時間も掛からず、メモリも食わない方法が理想ですが、 そうも行かないと思います。 メモリを食わずに済む方法を教えてください。 宜しくお願いします。
お礼
早速有り難うございました。 分からないながらに、お示しいただいたコードを貼り付けてみましたが、 エラーで動きませんでした。 貼り付けミスはないと思います。 全体がよく分かっているわけではありませんが、 keyだけソートするという主旨は分かったつもりです。 最後にある、 0..$#lines ]; の部分が分かりません。 (このまま貼り付けたのではいけないのでしょうか) 宜しくお願いします。