0

我有这个看起来像这样的文件数组:

my @html_pages_files = ("html.17", "html.9", "html.0", "html.10");

我会将文件的扩展名放在排序部分之后。基本上文件名是/html.\d/。问题是我正在尝试使用 map 和 sort 函数对其进行排序:

map { $_->[1] }
  sort { $a->[0] <=> $b->[0] }
     map { /html\.(.*)/; [$1, $_] }
        @html_pages_files;
print "@html_pages_files\n";

但是输出与原始数组相同。我一步一步地跟着@Chas。欧文斯在这里回答:使用 Perl,如何使用每个数组元素内的数字值对数组进行排序?. 请注意,我对 perl 很陌生,所以我没有得到所有的细节。

有人播种错误在哪里吗?谢谢!!!

4

2 回答 2

6

您永远不会保存排序结果!

@html_pages_files =
   map { $_->[0] }
    sort { $a->[1] <=> $b->[1] }
     map { /html\.(.*)/; [$_, $1] }
      @html_pages_files;

(为了保持一致性,我总是将整个字符串放在数组的第一个元素中。)

于 2013-03-07T17:02:36.833 回答
4

您的排序逻辑看起来正确,但您没有将操作结果分配给任何东西,所以您没有更改@html_pages_files. 尝试

@html_pages_files = map {$_->[1] } 
                    sort {$a->[0] <=> $b->[0]} 
                    map {/html\.(.*)/; [$1, $_]} @html_pages_files;
于 2013-03-07T16:59:47.470 回答