如果我有一个由括号中的元组组成的字符串,并且我想从Perl中的元组中获取最大值,该怎么办?例如:
输入:[每天,32] [hoho,16] [toodledum,128] [echigo,4]
输出:128
答案 0 :(得分:5)
如果您想要所有数据,可以先将其放入哈希值。
my %data = $str =~ /\[([^,]+),([^\]]+)\]/g;
use List::Util qw'max';
my($max) = max(values %data);
print "max: $max\n";
如果您想知道哪个密钥具有该号码,则可以使用grep
print "key: $_\n" for grep { $data{$_} == $max } keys %data;
如果你真的只需要最大值:
use List::Util qw'max';
print max $str =~ /\[[^,]+,([^\]]+)\]/g;
答案 1 :(得分:2)
对于提供的输入:
$input = "[everyday,32][hoho,16][toodledum,128][echigo:4]";
$max = -Inf;
foreach ($input =~ /\[\w+,(\d+)\]/g) {
$max = $_ if $max < $_;
}
print $max;
如果值可能是浮点值,请使用([^\]]+)
代替(\d+)
。