アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

データの日付でソートをしたいと思ってますが、うまくいっていません。

$kuchikm2の内容
1,8,,説明文,2010/07/06-01:27,1,,,,,,,
2,8,,紹介文,2010/07/18-02:27,1,,,,,,,
3,8,,コメント,2010/05/19-03:27,1,,,,,,,
4,8,,文言,2010/06/20-04:27,1,,,,,,,


ソートした結果@sorted
2,8,,紹介文,2010/07/18-02:27,1,,,,,,,
1,8,,説明文,2010/07/06-01:27,1,,,,,,,
4,8,,文言,2010/06/20-04:27,1,,,,,,,
3,8,,コメント,2010/05/19-03:27,1,,,,,,,

(perlソース)

#sortロジック
use warnings;
my @lines = $kuchikm2;
print @lines, " a\n";

my @sorted = map { $_->[4] }
sort { $a->[0] <=> $b->[0]}
map { [(split q{,}, $_)[4], $_] }
@lines;
print @sorted, " b\n";
(ここまで)


以前ソートで質問したときに、数字でないといけないと言われたような気がしています。

お手数かけます。

よろしくお願いいたします。

A 回答 (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";
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

無事ソートが出来ました!!

いつも助かってます。

お礼日時:2010/07/23 12:17

日付がこのフォーマットなら, 単純に文字列として (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";
(ここまで)

あと少しだと思うのですが、どこがどう問題なのかがわかっていません。

補足日時:2010/07/23 06:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!