Извлечение парных значений из скобок в Perl - PullRequest
2 голосов
/ 22 сентября 2009

Что если у меня есть строка, состоящая из кортежей в скобках, и я хотел бы получить максимальное значение из кортежа в Perl? Пример:

Ввод: [каждый день, 32] [хохо, 16] [туодледум, 128] [эчиго, 4]

Выход: 128

Ответы [ 2 ]

5 голосов
/ 22 сентября 2009

Если вам нужны все данные, вы можете сначала поместить их в хеш.

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;
2 голосов
/ 22 сентября 2009

Для предоставленного ввода:

$input = "[everyday,32][hoho,16][toodledum,128][echigo:4]";
$max = -Inf;
foreach ($input =~ /\[\w+,(\d+)\]/g) {
  $max = $_ if $max < $_;
}
print $max;

Используйте ([^\]]+) вместо (\d+), если значения могут быть значениями с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...