ソート時同じ値がある場合、表示順をコントロールする事は可能ですか?
ハッシュの配列を配列の数の多い順に表示する場合で配列の数が同じの場合の最初に表示される配列の数字につきまして
この配列の数が同じである場合の表示順序を意図した順番にする事は可能でございますか?
この意図した順番と申しますのは、小さい数字を先に表示するのではなく下記の@array2の配列値の並んでいる順や別途配列に0~9の数字を適当に入れておきにそれを参考に評価するという形を希望しており模索中なのですが、まずこの事につきまして可能か不可能かをご教授願いたいのと、もし可能でしたらどうか解決に至る先輩方のお知恵をお借り出来ませんでしょうか
よろしくお願い致します。
#!/usr/bin/perl
use Tie::IxHash;
@array0_n=('a','b','c','d');
@array1_n=('e','f','g');
@array2_n=('h','i');
@array3_n=('j');
@array4_n=();
@array5_n=();
@array6_n=('k');
@array7_n=('l','n');
@array8_n=('m','o','p');
@array9_n=('q','r','s','t');
%array1 = (
'0' => [ (@array0_n) ],
'1' => [ (@array1_n) ],
'2' => [ (@array2_n) ],
'3' => [ (@array3_n) ],
'4' => [ (@array4_n) ],
'5' => [ (@array5_n) ],
'6' => [ (@array6_n) ],
'7' => [ (@array7_n) ],
'8' => [ (@array8_n) ],
'9' => [ (@array9_n) ], );
#配列の数の多い順に並び替え
my @array2 =reverse sort { scalar @{$array1{$b}} <=> scalar @{$array1{$a}} or $a <=> $b } keys %array1;
@array9_n2=('a2','b2','c2','d2');
@array1_n2=('e2','f2','g2');
@array2_n2=('h2','i2');
@array3_n2=('j2');
@array4_n2=();
@array5_n2=();
@array6_n2=('k2');
@array7_n2=('l2','n2');
@array8_n2=('m2','o2','p2');
@array0_n2=('q2','r2','s2','t2');
tie %TmpList, 'Tie::IxHash';
#@array2を元に更に動的にハッシュ内に配列を作成
foreach(@array2){
my $x="array$_\_n2";
$TmpList{$_}=[(@$x)];
print "$_,$#{$x},@$x<br>\n";
}
print "1-end\n";
while ( ( $key , $value ) = each %TmpList ){
print "key:$key value:@$value\n" ;
}
print "2-end\n";
my @array3 = sort { scalar @{$TmpList{$b}} <=> scalar @{$TmpList{$a}} or $a <=> $b } keys %TmpList;
#Tie::IxHashモジュールで表示する際の順番を固定出来るかテスト
foreach(@array3){
my $x="array$_\_n2";
$TmpList2{$_}=[(@$x)];
print "$_,$#{$x},@$x<br>\n";
}
print "3-end\n";
__END__;
お礼
やれるところまでやり不明点は質問できたらと思っておりました。 今回大変参考になりました。