
ハッシュの配列を配列の数の多い順に表示する場合で配列の数が同じの場合の最初に表示される配列の数字につきまして
この配列の数が同じである場合の表示順序を意図した順番にする事は可能でございますか?
この意図した順番と申しますのは、小さい数字を先に表示するのではなく下記の@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ランキング
-
データベースから取得したデー...
-
配列から網羅的な文字列を生成...
-
配列やハッシュで中身が同じか...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
-
CSVファイルの特定の行だけを読...
-
配列を使わずに、数字(連番)...
-
文字の整列(printf)
-
範囲指定したセルを1つずつ飛...
-
EXCEL VBA ユーザーフォームの...
-
DoEventsが必要な理由について
-
UWSCの終了の仕方
-
ハッシュ検索はなぜ速い
-
Can't use string ("0") as an ...
-
VBA for文が止まらない
-
VBAでの一時停止と再開の方法
-
文字列を変数名として扱う方法
-
ExcelVBAでのデータ型変換、も...
-
スプレッドシート GASの繰り返...
-
perlで配列の要素が空なのを知...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
データのシャッフルについて
-
print文内でのsplice文と代入に...
-
perlで2つの配列を比較する方...
-
フェッチでデータが上書きされます
-
grep関数を用いた複数行からの抽出
-
投稿した文字がカタカナかどう...
-
配列やハッシュで中身が同じか...
-
forの中にリストを書くとその後...
-
正規表現 perl 連続ヒットの...
-
phpのmysql_fetch_arrayに該当...
-
配列を逆に変更したい!!
-
DBIを使ってのデータの取り出し...
-
繰り返して表示するのではなく1...
-
配列内定義サブルーチン呼び出し
-
CGIで数値を含む文字列から0を...
-
組み合わせを作るアルゴリズム
-
変数名を $_ にしたくない
-
ソート時同じ値がある場合、表...
-
python質問
おすすめ情報