• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データの日付でソートをしたい)

データの日付でソートをしたい

このQ&Aのポイント
  • データの日付でソートをしたいと思っていますが、うまくいっていません。
  • $kuchikm2のデータを日付でソートしたいですが、以前ソートで数字でないといけないと言われたため、うまくいっていません。
  • データの日付でソートするためのロジックをPerlで実装しましたが、適切なソートがうまく行われていないようです。お手数ですが、ご教示ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.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";

hihin2003
質問者

お礼

回答ありがとうございます。 無事ソートが出来ました!! いつも助かってます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

日付がこのフォーマットなら, 単純に文字列として (cmp で) 比較すれば十分ではないかな. あと, Schwartz変換が間違ってる. さらにいうと, 「Schwartz変換は必ずしも効率的ではない」という指摘もあったりします.この場合だと my @dates = map { (split /,/)[4] } @lines; my @sorted = @lines[sort { $dates[$a] cmp $dates[$b] } 0 .. $#lines]; とする手もあります.

hihin2003
質問者

補足

回答ありがとうございます。 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"; (ここまで) あと少しだと思うのですが、どこがどう問題なのかがわかっていません。