2

私はPerlに比較的慣れていません。配列への参照を含む $TransRef という配列への参照があります。私の目標は、$TransRef 引数を唯一の引数として取り、基になる配列への参照を 2 番目の要素 (文字列) で並べ替え、出力を $TransRef 参照に戻すサブルーチンを作成することです。誰かがこれを Perl で行う方法を示してもらえますか?

$TransRef を生成するコードを次に示します。まだテストされておらず、いくつかのバグがある可能性があります:

# Parse the data and move it into the Transactions container.
for ($Loop = 0; $Loop < 5; $Loop++)
{
   $Line = $LinesInFile[$Loop];
   # Create an array called Fields to hold each field in $Line.
   @Fields = split /$Delimitor/, $Line;  
   $TransID = $Fields[2];
   # Save a ref to the fields array in the transaction list.
   $FieldsRef = \@Fields;
   ValidateData($FieldsRef);
   $$TransRef[$Loop] = $FieldsRef;
}
SortByCustID($TransRef);

sub SortByCustID()
{
   # This sub sorts the arrays in $TransRef by the 2nd element, which is the cust #.
   # How to do this?
   my $TransRef = @_;
   ...
}
4

2 に答える 2

6

非常に簡単です:

sub sort_trans_ref {
    my $transRef = shift;
    @$transRef = sort { $a->[1] cmp $b->[1] } @$transRef;
    return $transRef;
}

ただし、元の配列を変更しない方が自然です。

sub sort_trans_ref {
    my $transRef = shift;
    my @new_transRef = sort { $a->[1] cmp $b->[1] } @$transRef;
    return \@new_transRef;
}
于 2012-09-25T20:16:04.257 に答える
2
sub string_sort_arrayref_by_second_element {

  my $param = shift;
  @$param = sort { $a->[1] cmp $b->[1] } @$param;

}
于 2012-09-25T20:16:45.050 に答える