perl - 请解释perl语句

标签 perl sorting

我正在阅读 Intermediate Perl 书,第 10 章中有这段代码。我添加了一些打印语句,但核心逻辑未受影响。

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @input = qw(Gilligan Skipper Professor Ginger Mary Ann);
my @sorted_positions = sort { $input[$a] cmp $input[$b] } 0 .. $#input;
print Dumper( \@sorted_positions );
my @ranks;
@ranks[@sorted_positions] = ( 1 .. @sorted_positions );
print Dumper( \@ranks );
foreach ( 0 .. $#ranks ) {
    print "$input[$_] sorts into position $ranks[$_]\n";
}

当我检查 Dumper 输出时,它正在打印 @sorted_positions 数组

$VAR1 = [
          5,
          0,
          3,
          4,
          2,
          1
        ];

这对我来说很有意义,但对于 @ranks 数组,它正在打印

$VAR1 = [
          2,
          6,
          5,
          3,
          4,
          1
        ];

我无法理解这条线在做什么。

@ranks[@sorted_positions] = ( 1 .. @sorted_positions );

我能够理解输出对程序的意义,但无法理解该输出是如何产生的,即 perl 在该语句中到底做了什么。

最佳答案

行:

@ranks[@sorted_positions] = ( 1 .. @sorted_positions );

相当于:

@ranks[5,0,3,4,2,1] = (1,2,3,4,5,6);

相当于:

$ranks[5] = 1;
$ranks[0] = 2;
$ranks[3] = 3;
$ranks[4] = 4;
$ranks[2] = 5;
$ranks[1] = 6;

这个例子使用了切片,它记录在perldata man page中.

关于perl - 请解释perl语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37539230/

相关文章:

java - 在数组中搜索值的总和

java - 使用我的快速排序算法对 7 个数字的列表进行排序时出现 StackOverflowError

python - 在第二列之后查找并替换

perl - 如何区分 Perl 中的 0 和空格?

Javascript 2D 数组排序 - 按数值

php - 仅对关联数组的奇数元素进行排序

perl - 为什么perldoc里面有那么多ESC?

javascript - Perl 将值转换为表

perl - 在自定义排序中隐藏 "Argument isn' t numeric"

Swift 字典排序