2

次のように作成する2D配列があります。

# i do this in a loop
push @{ $list[$array_index++] }, ($x[0], $x[1], $x[2], $y);

この配列の並べ替え関数を次のように書いてみました。

@sorted = sort {$a->[3] > $b->[3]} @list;

しかし、うまくいかないようです。

私がやりたいのは、各「行」の「3 番目の列」の値に基づいて「行」をソートすることです。どうすればいいのですか?

4

1 に答える 1

2

ほぼ理解できましたが、間違った演算子を使用しています。ソート サブルーチンは、3 つの値のいずれかを返す必要があります。<=>数値比較では、左辺が右辺よりも小さい場合は -1、等しい場合は 0、左辺が右辺よりも大きい場合は 1 を返す宇宙船 ( ) を使用できます。

そう:

@sorted = sort {$a->[3] <=> $b->[3]} @list;

(配列はゼロインデックスであるため、実際には4番目の列であることに注意してください。それがあなたが望むものだと思います。)

于 2013-05-09T19:17:51.307 に答える