【问题标题】:Schwartzian transform in Perl?Perl 中的 Schwartzian 变换?
【发布时间】:2011-06-26 19:50:15
【问题描述】:
my @output =
map $_->[0],
sort{$a->[1] <=> $b->[1]}
map [$_,-s $_],     
@array;   

有人可以更详细地解释代码吗?我无法理解它的头部或尾部..

【问题讨论】:

    标签: perl


    【解决方案1】:

    自下而上阅读:

    @array
    

    一个数组(文件名,稍后给出)。

    map [$_,-s $_],
    

    对于每个文件名,获取对双元素匿名数组的引用,第一个元素是文件名,第二个元素是文件的字节大小。 map 返回这些数组引用的列表。

    sort{$a->[1] <=> $b->[1]}
    

    通过增加文件大小对数组引用列表进行排序。

    map $_->[0],
    

    将数组引用列表转回文件名列表,但现在按排序顺序。

    my @output =
    

    将列表保存在@output 中。

    这在功能上等同于:

    my @output = sort { -s $a <=> -s $b } @array;
    

    但只获取每个文件的大小一次,而不是每次排序完成的比较一次。

    【讨论】:

    • @compile-fan "spaceship" 运算符&lt;=&gt; 将比较两个参数并返回 1、0 或 -1,表示大于、等于或小于。
    • 您可以通过perldoc perlop查找不熟悉的运算符。 &lt;=&gt; 运算符包含在 Equality Operators 部分中。 perldoc.perl.org/perlop.html#Equality-Operators
    【解决方案2】:

    维基百科有详细的explanation and analysis

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多