Perlコーディング初心者質問スレ Part 39
■ このスレッドは過去ログ倉庫に格納されています
0082nobodyさん
04/12/02 12:10:08ID:WEQP3q+X●先頭から16個目のデータをキーにしてソートする場合
@address = sort{(split(/,/,$a))[15] <=> (split(/,/,$b))[15]} @address;
●先頭から16個目のデータを1次キー、3つ目のデータを2次キーとしてソートする場合
@address = sort{(split(/,/,$a))[15] <=> (split(/,/,$b))[15] or (split(/,/,$a))[2] <=> (split(/,/,$b))[2]} @address;
ここで、ソート部をサブルーチン化しろとの上司の命令。以下のように書いてみました。
#&datasort(データの型,並べ順,並べ替え時のキー,配列)
#データの型:数値は1、文字列は2
#並べ順:昇順は1、降順は2
#並べ替え時のキー:先頭は0、3番目なら2、5番目なら4という具合。
@address = &datasort(1,1,15,@address);
#並べ替え部のルーチン
sub datasort{
#$format:数値は1、文字列は2 $order:昇順は1、降順は2 $key:ソート対象のキー、先頭は0、5番目なら4など。
my ($format,$order,$key,@data) = @_;
if($format == 1){
if($order == 1){@data = sort{(split(/,/,$a))[$key] <=> (split(/,/,$b))[$key]} @data;}
elsif($order == 2){@data = sort{(split(/,/,$b))[$key] <=> (split(/,/,$a))[$key]} @data;}
}elsif($format == 2){
if($order == 1){@data = sort{(split(/,/,$a))[$key] cmp (split(/,/,$b))[$key]} @data;}
elsif($order == 2){@data = sort{(split(/,/,$b))[$key] cmp (split(/,/,$a))[$key]} @data;}
}
return @data;
}
で、複数のキーを使ってソートする場合の呼び出し方がわかりません。
@address = &datasort(1,1,15,@address) or &datasort(1,1,2,@address);
だと、当然のことながらorより後ろは動かない。
誰か教えてくださいませ。。
それか、サブルーチンの書き方がおかしい?
■ このスレッドは過去ログ倉庫に格納されています