我在表单中有一个文件名列表integer_Name.txt.我想返回具有最高整数值的文件名.除了字符串比较之外,还有什么办法可以在perl中完成吗?
这通常称为自然排序.有实现它的模块:Sort :: Naturally
要获得最高价值 - 您可以排序并获取最后一个元素:
use strict; use warnings;
use Sort::Naturally;
my @names = (...);
my $name_with_biggest_number = (nsort(@names))[-1];
Run Code Online (Sandbox Code Playgroud)
更新 - 手动排序
使用地图/排序/地图成语.但只有在文件名中有单个数字时才会起作用:
use strict; use warnings;
my @names = (...);
my @sorted_names =
map { $_->[0] }
sort { $b->[1] <=> $a->[1] } ## descending order
map { [ $_, m/(\d+)/ ] } ## extracting first number
@names;
my $name_with_biggest_number = $sorted_names[0];
Run Code Online (Sandbox Code Playgroud)
更新 - 没有排序
根据输入数据,避免使用可能更有效sort.因此,您可以显式编码最大数量的搜索:
sub name_with_largest_number {
my (@names) = @_;
my $max_number = undef;
my $name_with_max_number = undef;
for my $name (@names) {
my ($number) = ($name =~ m/(\d+)/);
if (defined $number) {
if (! defined $max_number || $number > $max_number) {
$max_number = $number;
$name_with_max_number = $name;
}
}
}
return $name_with_max_number;
}
print name_with_largest_number(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |