2014-10-22 2 views
0

Я знаю, как это сделать длинным способом, но мне интересно, есть ли простой способ разбить серию чисел на ведра.Разделение ввода на ведра - Perl

У меня есть ряд данных, который связывает два числа вместе:

Частота Значение

Я хочу, чтобы разбить значения на подразделы частоты, а затем получить среднее и стандартное отклонение членов каждого диапазон 0,05 от частоты.

Так что я хочу, это серия массивов, содержащих значения, связанные с частотами.

Мой длинный скучный подход

%results =(); 
$key = int(($frequency * 100)/20); 
if (!exists($results{$key})) { 
    @temp = ($value); 
    $results{$key} = @temp; 
} else { 
    $results{$key} = push($results{$key}, $value); 
} 

Есть ли способ, чтобы упростить это?

+0

Возможно, было бы более информативным, если бы вы отредактировали ваш вопрос, чтобы включить, где вы получаете '$ frequency' и' $ value' от - например. они находятся в массивах? Некоторая сложная структура данных? –

ответ

1

Вам нужно только проверить, существуют ли вещи, когда вы пытаетесь извлечь данные из хэш-таблицы. Вам не нужно делать это при добавлении данных в таблицу. Кроме того, вам не нужно помещать временные имена в массивы. Вы можете сделать анонимные массивы, поставив [] на список чисел. Вы также можете создавать анонимные хэши с помощью {}, но это напрямую не связано с этой проблемой.

my %results; #will store data like $results{$frequency} = [list of values] 
# storing data: 
my $key = int(($frequency * 100)/20); 
push @{$results{$frequency}}, $value;   #the @{ } means interpret $results{$frequency} as an array 
# fetching data, here is where you check if things exist, sometimes 
foreach (keys %results) { 
    print "For $_ frequency...\n"; 
    print "The values are: @{$results{$_}}\n\n"; #if you don't include @{ }, it will say ARRAYREF(0xsdfasdf) 
} 
3

Похоже, вы действительно хотите Хэш массивов.

Поэтому вам нужно просто push:

push @{ $results{$key} }, $value; 

Для получения дополнительной информации о таких понятиях, проверить Perl Data Structures Cookbook.

Смежные вопросы