我想在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])); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |