- ベストアンサー
データの日付でソートをしたい
- データの日付でソートをしたいと思っていますが、うまくいっていません。
- $kuchikm2のデータを日付でソートしたいですが、以前ソートで数字でないといけないと言われたため、うまくいっていません。
- データの日付でソートするためのロジックをPerlで実装しましたが、適切なソートがうまく行われていないようです。お手数ですが、ご教示ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> my @lines = $kuchikm2; 上の文では行単位で配列に入らず、要素1の配列になります。まずは、この部分を直すのが先決かと思います。 use warnings; my @lines = map { "$_\n" } split /\n/, $kuchikm2; print @lines, " a\n"; my @sorted = map { $_->[1] } sort { $b->[0] cmp $a->[0]} map { [(split /,/, $_)[4], $_] } @lines; print @sorted, " b\n";
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
日付がこのフォーマットなら, 単純に文字列として (cmp で) 比較すれば十分ではないかな. あと, Schwartz変換が間違ってる. さらにいうと, 「Schwartz変換は必ずしも効率的ではない」という指摘もあったりします.この場合だと my @dates = map { (split /,/)[4] } @lines; my @sorted = @lines[sort { $dates[$a] cmp $dates[$b] } 0 .. $#lines]; とする手もあります.
補足
回答ありがとうございます。 cmpて゜比較ですね。早速やってみました。 データ 1,8,,説明文,2010/07/06-01:27, 2,8,,紹介文,2010/07/18-02:27, 3,8,,コメント,2010/05/19-03:27, 4,8,,文言,2010/06/20-04:27, perl実行結果 1,8,,説明文,2010/07/06-01:27, 2,8,,紹介文,2010/07/18-02:27, 3,8,,コメント,2010/05/19-03:27, 4,8,,文言,2010/06/20-04:27, 結果の表示が今回初めて表示されましたが、ソートされていませんでした。 (perlソース) 略 #sortロジック use warnings; my @lines = $kuchikm2; print @lines, " a\n"; my @dates = map { (split /,/)[4] } @lines; my @sorted = @lines[sort { $dates[$a] cmp $dates[$b] } 0 .. $#lines]; print @sorted, " b\n"; (ここまで) あと少しだと思うのですが、どこがどう問題なのかがわかっていません。
お礼
回答ありがとうございます。 無事ソートが出来ました!! いつも助かってます。