• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ソート時同じ値がある場合、表示順をコントロールする事は可能ですか?)

配列の表示順をコントロールする方法とは?

このQ&Aのポイント
  • 配列の数が同じ場合、表示順序を意図した順番にすることは可能かを教えてください。
  • 配列の数の多い順に配列を表示し、その中で値の並びを別の配列を参考にして順番を決めたいです。
  • 配列の数が同じ場合でも、意図した順番になる方法として、Tie::IxHashモジュールを使用する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答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行目で出ている警告は消してません。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「2つのデータが期待した順序になっている」という条件をプログラムで書ければ全く問題なく可能です. sort が終わると, 隣り合うデータが「比較関数を満たす」ように並びますから.

関連するQ&A

専門家に質問してみよう