我有一个文本文件,其中包含我想根据字符串中包含的第一个数字排序的字符串列表。如果字符串不包含数字,则忽略。
例如:
string1
string2
another_string1
another_string2
我想将上述内容排序为:
string1
another_string1
string2
another_string2
答案 0 :(得分:4)
@strings = qw/
string1
string2
another_string1
another_string2
/;
my @sorted_strings =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { /(\d+)/ ? [ $_, $1 ] : () }
@strings;
答案 1 :(得分:1)
#!/usr/bin/perl
use strict;
my @strings = qw/
string1
string2
another_string1
another_string2
/;
my %h;
foreach my $string (@strings) {
if ($string =~ /(\d+)/) {
push @{$h{$1}}, $string;
} else {
print "cannot classify $string : skipping\n";
}
}
foreach my $key (sort { $a <=> $b } keys %h) {
foreach my $s (@{$h{$key}}) {
print $s . "\n";
}
}
比ysth's solution更详细,但我希望它有所帮助。基本上:我使用散列%h
,其中键是数字(从字符串的末尾匹配),值是包含以该数字结尾的字符串的数组。在构造了哈希之后,我打印其内容排序键(即字符串末尾的数字)。