加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我想在Perl中排列数组,但是结果并不排序

发布时间:2020-12-15 21:30:29 所属栏目:大数据 来源:网络整理
导读:我有一个数组,我想排序.数组A的每个元素都是一个有3个元素的数组. 阵列A看起来像: my @A = ([2,3,1],[1,2,3],2],[3,1,[2,4]); 我想按顺序排列A.当比较2个元素时,使用第一个数字.如果有领带,则使用第二个数字,然后是第三个数字. 这是我的代码我使用函数’cmp
我有一个数组,我想排序.数组A的每个元素都是一个有3个元素的数组.
阵列A看起来像:
my @A = ([2,3,1],[1,2,3],2],[3,1,[2,4]);

我想按顺序排列A.当比较2个元素时,使用第一个数字.如果有领带,则使用第二个数字,然后是第三个数字.

这是我的代码我使用函数’cmpfunc’来比较2个元素.

sub cmpfunc {
    return ($a->[0] <=> $b->[0]) or 
           ($a->[1] <=> $b->[1]) or
           ($a->[2] <=> $b->[2]);
}
my @B = sort cmpfunc @A;
print "Result:n";
for my $element (@B) {
    print join(",",@{$element}) . "n";
}

结果:

1,3
1,2
2,1
2,4
3,2

结果有点分类,但不正确.我期待的是:

1,2
1,3
2,4
2,1
3,2

我的比较功能有什么错误吗?
奇怪的是,当我将比较代码放在块中时,结果被正确排序.

my @C = sort { ($a->[0] <=> $b->[0]) or 
               ($a->[1] <=> $b->[1]) or
               ($a->[2] <=> $b->[2]) } @A;

解决方法

你正在执行
return ($a->[0] <=> $b->[0])

它在它到达任何“或”子句之前返回.

删除“返回”关键字,或者在整个参数列表中添加括号,以返回:

sub cmpfunc {
    return(($a->[0] <=> $b->[0]) or
           ($a->[1] <=> $b->[1]) or
           ($a->[2] <=> $b->[2]));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读