【问题标题】:Sort function in PerlPerl中的排序函数
【发布时间】:2011-09-21 05:40:02
【问题描述】:

考虑:

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort @a;

print "@b";

输出:1 10 11 21 3 5 9

键盘链接:http://codepad.org/Fvhcf3eP

我猜sort 函数没有将数组的元素作为整数。这就是为什么输出不是:

1 3 5 9 10 11 21

是吗?

我怎样才能得到上述结果作为输出?

【问题讨论】:

标签: perl


【解决方案1】:

Perl 的sort 函数的默认实现是将值排序为字符串。执行数字排序:

my @a = sort {$a <=> $b} @b;

链接页面显示了其他示例,说明如何不区分大小写、以相反的顺序(降序)等进行排序。

您可以创建显式子例程以防止重复:

sub byord { $a <=> $b };
...
@a = sort byord @b;

这在功能上等同于使用匿名子例程的第一个示例。

【讨论】:

  • 其他用户插入的无用的胡言乱语已被删除。
  • @a$a 之间没有潜在的冲突吗?例如,如果你想得到@a 的长度怎么办?是的,@a 在问题中,但也许详细说明一下?
【解决方案2】:

你是对的。因此,只需告诉 Perl 将其视为一个整数,如下所示。

文件 foop.pl

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort {$a <=> $b} @a;

print "@b";

运行

perl foop.pl
1 3 5 9 10 11 21

【讨论】:

    【解决方案3】:

    提供自定义比较功能(数值比较):

    sort {$a <=> $b} @array;
    

    【讨论】:

      【解决方案4】:

      这是一个数字排序:

      @sorted = sort { $a <=> $b } @not_sorted   
      

      【讨论】:

        【解决方案5】:
        @b = sort { $a <=> $b } @a;
        

        是数字

        【讨论】:

          【解决方案6】:

          使用spaceship operatorsort { $a &lt;=&gt; $b } @a

          【讨论】:

          • Programming Perl 将其定义为宇宙飞船操作符,但它也提到了星球大战,所以我猜 Tie Fighter 也是允许的
          【解决方案7】:

          猜测是错误的方法。不懂排序的可以查一下:sort

          my @b = sort{$a <=> $b} @a;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-11-30
            • 2015-05-18
            • 1970-01-01
            • 2013-08-24
            • 1970-01-01
            • 2018-01-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多