Jef*_*eff 1 arrays sorting perl
我很难按字母顺序对 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";
}
Run Code Online (Sandbox Code Playgroud)
这是未排序的输出:
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
Run Code Online (Sandbox Code Playgroud)
这是所需的排序输出:
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
Run Code Online (Sandbox Code Playgroud)
请指教。谢谢。
代替
for my $genus (keys %genus_species)
Run Code Online (Sandbox Code Playgroud)
和
for my $genus (sort keys %genus_species)
Run Code Online (Sandbox Code Playgroud)
如果您的数字要达到10,您需要使用natsortfrom Sort::Keys::Natural (1, 2, ..., 9, 10, ...) 而不是内置sort(1, 10, 11, ..., 2, ...),至少是对文件名进行排序。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |