为什么 Perl 不按数字顺序对数字进行排序?

  • 本文关键字:数字 排序 顺序 Perl perl
  • 更新时间 :
  • 英文 :


我必须编写代码,接受用户输入并将其转换为数组,然后用最大的数字乘以数组中的所有内容。当我输入任何数字<=9时,代码运行良好。但是当我输入超过9的数值时,代码就会"掉落"。它是最大的值,如果这有意义的话。

在我的代码中,我对数组进行排序,然后将最后一个值(最大的值)乘以整个数组

输入数字(用户输入):1 3 5 7 2 4 6 8 10

final(经过排序和相乘后):8、80、16、24、32、40、48、56、64

您可以看到10是最大的数(由于排序,它应该是最后一个),但由于某种原因,10被推到第一个位置,而8成为最后/最大的值。如果我在输入的任何地方加上9,9将成为最后一个/最大的数字,而不是8,因为它应该是8。

我甚至在一个在线编译器上尝试了这个,结果是相同的

为什么大于9的东西会这样做?我该如何解决这个问题?

而且,代码看起来很糟糕,因为这是我第一天接触Perl lol

print("input numbers: ");
$nums = <STDIN>;
@converted = split(' ', $nums); #turned user input into an array
@sorted = sort(@converted);
$multi = @sorted[-1]; #puts the last/largest number of the array in $multi
foreach $x (@sorted){ #loops through the array and multiplies everything by the last/largest value
$x = $x * $multi
}
print("final: ");
print join(', ', @sorted); #just added commas to make it readable

我知道有一种更简单的方法可以用最小最大的东西来做到这一点,但是当我尝试它时它不起作用

sort默认按词法排序。

这将ba放在i之前,因为bi之前,
这将10放在9之前,因为19之前。

排序
my @sorted = sort { $a <=> $b } @unsorted;

use Sort::Key qw( nsort );
my @sorted = nsort @unsorted;

最新更新