如果我有一个由括号中的元组组成的字符串,我想从Perl中的元组中获得最大值?例如:在Perl中从括号中删除键 - 值对
输入:[每天,32] [HOHO,16] [toodledum,128] [越后,4]
输出:128
如果我有一个由括号中的元组组成的字符串,我想从Perl中的元组中获得最大值?例如:在Perl中从括号中删除键 - 值对
输入:[每天,32] [HOHO,16] [toodledum,128] [越后,4]
输出:128
对于输入提供:
$input = "[everyday,32][hoho,16][toodledum,128][echigo:4]";
$max = -Inf;
foreach ($input =~ /\[\w+,(\d+)\]/g) {
$max = $_ if $max < $_;
}
print $max;
如果这些值可能是浮点值,则使用([^\]]+)
而不是(\d+)
。
我建议总是声明一个迭代器变量 - 即foreach我的$ value($ input ....) - 而不是依赖于$ _,因为它有时会以意想不到的方式在你的下面改变。可能不是这种情况,但这是一个很好的习惯。 – Ether 2009-09-22 00:16:29
如果你想要所有的数据,你可以先把它放到一个散列中。
my %data = $str =~ /\[([^,]+),([^\]]+)\]/g;
use List::Util qw'max';
my($max) = max(values %data);
print "max: $max\n";
如果你想知道哪个键(S)使用该号码,然后你可以使用一个grep
print "key: $_\n" for grep { $data{$_} == $max } keys %data;
如果你真的只需要最大值:
use List::Util qw'max';
print max $str =~ /\[[^,]+,([^\]]+)\]/g;
胡萝卜标志是什么意思? – biznez 2009-09-22 07:34:39
通常情况下[]表示匹配括号中的任何一个字符(例如a [bc] d会匹配abd,acd但不匹配abcd)。 '^'否定它,所以一个[^ bc] d会匹配aed,但不匹配abd。 – 2009-09-22 12:45:51
待办事项你关心所有其他的价值?你以后需要使用“toodledum”吗? – innaM 2009-09-22 07:18:14