gpt4 book ai didi

perl - 我想在 Perl 中对数组数组进行排序,但结果没有排序

转载 作者:行者123 更新时间:2023-12-03 21:05:52 24 4
gpt4 key购买 nike

我有一组要排序的数组。数组 A 的每个元素都是一个包含 3 个元素的数组。
数组 A 看起来像:

my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,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,2,3
1,0,2
2,3,1
2,2,4
3,1,2

结果有点排序,但不正确。我期望的是:
1,0,2
1,2,3
2,2,4
2,3,1
3,1,2

我的比较函数有什么错误吗?
奇怪的是,当我将比较代码放在块中时,结果是正确排序的。
my @C = sort { ($a->[0] <=> $b->[0]) or 
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]) } @A;

最佳答案

你正在执行

return ($a->[0] <=> $b->[0])

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

要么删除“return”关键字,要么在整个 arg 列表周围添加括号以进行 return:
sub cmpfunc {
return(($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]));
}

关于perl - 我想在 Perl 中对数组数组进行排序,但结果没有排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8850840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com