0

ここでは最小限のケースを作成していますが、配列内の配列の値をどのようにダンプすればよいですか?

文字列値と数値を含む複数の配列を 2 番目の値で並べ替え、最初のフィールドの値を順番に読み取ります。

my @a = { "A" , 123 };
my @b = { "B" , 9 };

my @entries = ();
push @entries , \@a;
push @entries , \@b;

@entries = sort { $a[1] cmp $b[1] } @entries;
for (@entries)
{
        print @_[0] , "\n"; // should be "A\nB" after for loop
}

また、どのドキュメントを表示すればよいですか? うーん... 配列内の通常の配列とは異なります。たとえば、 のような構文です$a[0][0]

4

1 に答える 1

4

{}最初の問題は、そこに配列の配列がないことです。 とを構築するために使用するため、ハッシュの配列の配列ができて@aしまいます@b
(ところで、特にスカラーの使用とソートブロックでの使用を考えるab、識別子としての選択は不適切です。これらのソートブロック内で逆参照しているものと混同したくないでしょう。)$a$b

あなたがそれを修正した場合:

my @a = ("A", 123);
my @b = ("B", 9);

次に、並べ替えを数値順に並べ替えるように修正します (cmpは文字列並べ替えで、$a配列$b参照です)。

sort { $a->[1] <=> $b->[1] } @entries;

次に、print行を次のように変更します。

print $_->[0], "\n";

期待する結果が表示されるはずです。

スクリプトの先頭に追加use strict; use warnings;し、モジュールを自由に使用Data::Dumperしてデバッグします。

于 2012-06-13T06:10:03.807 に答える