【问题标题】:Advanced sorting of arrays数组的高级排序
【发布时间】:2021-01-30 12:37:47
【问题描述】:

我在按字母顺序对 Perl 脚本的输出进行排序时遇到了困难。

这是脚本:

#!/usr/bin/perl
use strict;
use warnings;
use English;   ## use names rather than symbols for special variables

my $dir = '/Users/jdm/Desktop/xampp/htdocs/cnc/images/plants';

opendir my $dfh, $dir  or die "Can't open $dir: $OS_ERROR";
my %genus_species;  ## store matching entries in a hash

for my $file (readdir $dfh)
{
    next unless $file =~ /.png$/;  ## entry must have .png extension
    my $genus = $file =~ s/\d*\.png$//r;
    push(@{$genus_species{$genus}}, $file);   ## push to array,the @{} is to cast the single entry to a reference to an list
}

for my $genus (keys %genus_species)
{
    print "$genus = ";
    print "$_ " for sort @{$genus_species{$genus}}; # sort and loop though entries in list reference
    print "\n";
}

这是未排序的输出:

Veronica_chamaedrys = Veronica_chamaedrys.png 
Cardamine_douglassii = Cardamine_douglassii1.png Cardamine_douglassii2.png 
Filipendula_rubra = Filipendula_rubra1.png Filipendula_rubra2.png 
Taxodium_distichum = Taxodium_distichum.png 
Asplenium_platyneuron = Asplenium_platyneuron1.png Asplenium_platyneuron2.png Asplenium_platyneuron3.png

这是所需的排序输出:

Asplenium_platyneuron = Asplenium_platyneuron1.png Asplenium_platyneuron2.png Asplenium_platyneuron3.png
Cardamine_douglassii = Cardamine_douglassii1.png Cardamine_douglassii2.png
Filipendula_rubra = Filipendula_rubra1.png Filipendula_rubra2.png
Taxodium_distichum = Taxodium_distichum.png
Veronica_chamaedrys = Veronica_chamaedrys.png

请指教。谢谢。

【问题讨论】:

  • 调用键for my $genus (sort keys %genus_species)后添加排序
  • 有效!!!谢谢克里斯。

标签: arrays perl sorting


【解决方案1】:

替换

for my $genus (keys %genus_species)

for my $genus (sort keys %genus_species)

如果您的号码要达到10,您需要使用natsort from Sort::Keys::Natural (1, 2, ..., 9, 10, ...) 而不是内置的@987654326 @ (1, 10, 11, ..., 2, ...),至少对于文件名排序。

【讨论】:

  • 感谢 ikegami 解释您的解决方案!
猜你喜欢
  • 2014-08-28
  • 2011-02-03
  • 1970-01-01
  • 2013-01-29
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多