Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中对数组引用数组进行排序 提要_Perl_Sorting - Fatal编程技术网

在Perl中对数组引用数组进行排序 提要

在Perl中对数组引用数组进行排序 提要,perl,sorting,Perl,Sorting,我试图根据数组的第二个元素对数组引用进行排序 例如,我想将@array中的以下数组排序为另一个已排序数组: 632.8 5 422.1 4 768.6 34 这是结束数组,@sorted\u数组 422.1 4 632.8 5 768.6 34 尝试代码 我遇到了这个问题,并对其进行了轻微修改。但是,我收到一个错误:当我尝试取消对排序数组的引用时,在.\test.pl第17行的打印中使用了未初始化的值 #!/bin/perl use strict; use warnings; my @ar

我试图根据数组的第二个元素对数组引用进行排序

例如,我想将
@array
中的以下数组排序为另一个已排序数组:

632.8 5
422.1 4
768.6 34
这是结束数组,
@sorted\u数组

422.1 4
632.8 5
768.6 34
尝试代码 我遇到了这个问题,并对其进行了轻微修改。但是,我收到一个错误:
当我尝试取消对排序数组的引用时,在.\test.pl第17行的打印中使用了未初始化的值

#!/bin/perl
use strict;
use warnings;

my @array = ();
foreach my $i (0..10) {
    push @array, [rand(1000), int(rand(100))];
}

foreach my $i (@array) {
    print "@$i\n";
}
print "================\n";

my $sorted_ref = sort_arr(\@array);
print @$sorted_ref;

sub sort_arr {
    my @arr = @$_[0];
    my @sorted_arr = sort { $a->[1] cmp $b->[1] } @arr;
    return \@sorted_arr;
}

将数组引用传递到子例程中,然后尝试将其用作数组。你需要先去引用它

sub sort_arr {
    my ($arr) = @_;
    my @sorted_arr = sort { $a->[1] cmp $b->[1] } @{ $arr };
    return \@sorted_arr;
}

将数组引用传递到子例程中,然后尝试将其用作数组。你需要先去引用它

sub sort_arr {
    my ($arr) = @_;
    my @sorted_arr = sort { $a->[1] cmp $b->[1] } @{ $arr };
    return \@sorted_arr;
}

非常感谢!我以为我在用
my@arr=@$\u0]解除对它的引用:p@SinTrans如果您将
$\[0]
放在大括号中,例如
my@arr=@{$\[0]},它会起作用
@SinTrans作为旁注,当数据似乎是数字时,您正在使用
cmp
(字符串比较)。它可能应该是
(数字比较)。@HunterMcMillen谢谢@是的,但我相信perl通过
cmp
成功地解决了这个问题,因为perl通常会做出类似的模糊决定D@SinTrans:否。数字和字符串比较非常不同。如果Perl能够“弄明白”,就不会有两个操作符了,非常感谢!我以为我在用
my@arr=@$\u0]解除对它的引用:p@SinTrans如果您将
$\[0]
放在大括号中,例如
my@arr=@{$\[0]},它会起作用
@SinTrans作为旁注,当数据似乎是数字时,您正在使用
cmp
(字符串比较)。它可能应该是
(数字比较)。@HunterMcMillen谢谢@是的,但我相信perl通过
cmp
成功地解决了这个问题,因为perl通常会做出类似的模糊决定D@SinTrans:否。数字和字符串比较非常不同。如果Perl能够“弄明白”,就不会有两个操作符