Perlのsort関数
これまで単純な文字列比較くらいしか使ったことがなかったけど、複数条件でソートできたらいいな〜と調べてみたらあった。さすがPerl。
論文の一部にヒットした模様だけど、論旨は無視して欲しいところだけつまみ食い。
◆配列の中の複数の成分で並べ替える。
Naive multi-subkey record sorts / A Fresh Look at Efficient Perl Sorting
下の例は、例えば「ドット付きn進表記のIPアドレスを格納した配列を、各組に分けて順番に比較して、昇順に並べ替える」ような時に使える。
@out = sort { my @a = $a =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; my @b = $b =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $a[0] <=> $b[0] || $a[1] <=> $b[1] || $a[2] <=> $b[2] || $a[3] <=> $b[3] } @in;
条件いくらでも足せるし(たぶん)、判定順番も自在だし、俺sort関数ベンリダナー、と。
sort関数GJ、Perl GJ。