![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ハッシュの配列を配列の数の多い順に表示する場合で配列の数が同じの場合の最初に表示される配列の数字につきまして
この配列の数が同じである場合の表示順序を意図した順番にする事は可能でございますか?
この意図した順番と申しますのは、小さい数字を先に表示するのではなく下記の@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__;
No.2ベストアンサー
- 回答日時:
わけの分からない連番のついた変数を使ってるとか、シンボリックリファレンスを使っているとか
突っ込みたいところはあるんですがそれはおいといて、
配列の要素数が同じな場合は先頭の文字コードの大小で決めると言うパターンを例にすると
こんな感じになります。
あと
>ハッシュの配列
配列のハッシュ、ですよね。
#!/usr/bin/perl
use strict;
use warnings;
use feature ':5.10';
no strict 'refs';
my @array0_n = qw(a b c d);
my @array1_n = qw(e f g);
my @array2_n = qw(h i);
my @array3_n = qw(j);
my @array4_n = ();
my @array5_n = ();
my @array6_n = qw(k);
my @array7_n = qw(l n);
my @array8_n = qw(m o p);
my @array9_n = qw(q r s t);
my %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 = sort { scalar @{$array1{$b}} <=> scalar @{$array1{$a}}
or
$array1{$b}[0] cmp $array1{$a}[0] }
keys %array1;
our @array9_n2 = qw(a2 b2 c2 d2);
our @array1_n2 = qw(e2 f2 g2);
our @array2_n2 = qw(h2 i2);
our @array3_n2 = qw(j2);
our @array4_n2 = ();
our @array5_n2 = ();
our @array6_n2 = qw(k2);
our @array7_n2 = qw(l2 n2);
our @array8_n2 = qw(m2 o2 p2);
our @array0_n2 = qw(q2 r2 s2 t2);
foreach (@array2){
my $x = "array${_}_n2";
say "$_, $#{$x}, @$x<br>";
}
say '######';
my @ary_of_ary = (
\@array0_n2,
\@array1_n2,
\@array2_n2,
\@array3_n2,
\@array4_n2,
\@array5_n2,
\@array6_n2,
\@array7_n2,
\@array8_n2,
\@array9_n2,
);
foreach (@array2){
say "$_, $#{$ary_of_ary[$_]}, @{$ary_of_ary[$_]}<br>";
}
perl okw.pl
Use of uninitialized value in string comparison (cmp) at okw.pl line 34.
Use of uninitialized value in string comparison (cmp) at okw.pl line 34.
9, 3, a2 b2 c2 d2<br>
0, 3, q2 r2 s2 t2<br>
8, 2, m2 o2 p2<br>
1, 2, e2 f2 g2<br>
7, 1, l2 n2<br>
2, 1, h2 i2<br>
6, 0, k2<br>
3, 0, j2<br>
4, -1, <br>
5, -1, <br>
######
9, 3, a2 b2 c2 d2<br>
0, 3, q2 r2 s2 t2<br>
8, 2, m2 o2 p2<br>
1, 2, e2 f2 g2<br>
7, 1, l2 n2<br>
2, 1, h2 i2<br>
6, 0, k2<br>
3, 0, j2<br>
4, -1, <br>
5, -1, <br>
面倒なので34行目で出ている警告は消してません。
No.1
- 回答日時:
「2つのデータが期待した順序になっている」という条件をプログラムで書ければ全く問題なく可能です.
sort が終わると, 隣り合うデータが「比較関数を満たす」ように並びますから.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
乱数と順列と組み合わせ
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
VBA横データを縦にしたいです
-
VB2010でCSVファイルの読み込み
-
チェックデジットについて
-
乱数の桁数指定、または範囲指定。
-
CSVファイルの特定の行だけを読...
-
リストボックスに縦スクロール...
-
Can't use string ("0") as an ...
-
フラグについて
-
GIFアニメをループさせたくない
-
ループからの抜け出し方
-
VBA Dir関数でファイルをループ...
-
VBAのautofilter、criteriaの配...
-
ループフリー
-
VBAで3秒だけ時間を止めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
index関数で複数個抜き出す
-
perlで2つの配列を比較する方...
-
perlでファイルの拡張子を除い...
-
桁数指定と四捨五入
-
[Perl]長すぎるif文を簡単にしたい
-
grep関数を用いた複数行からの抽出
-
配列やハッシュで中身が同じか...
-
組み合わせを作るアルゴリズム
-
複数の配列の要素を繰り返し処...
-
正規表現に関する質問
-
データベースから取得したデー...
-
非共通要素を抜き出す
-
ソート時同じ値がある場合、表...
-
Perl 戻り値の型の判定って出来...
-
QNo.3258883データベースから取...
-
配列に入った変数を二度使いたい
-
C言語の関数ポインタのイメージ...
-
ループ中でのmy宣言と処理速度
-
配列から網羅的な文字列を生成...
-
アルファベットn文字の組み合わ...
おすすめ情報