Скорее всего, вам нужна более сложная структура данных, например, вложенный хэш. Трудно привести надежный пример без дополнительных знаний о данных, но, скажем, ваш первый идентификатор был abc
, второй - def
и т. Д .:
my %protein_entries = (
abc => {
qualifier => 'something',
molecular_weight => 1234,
pi => 'something',
},
def => {
qualifier => 'something else',
molecular_weight => 5678,
pi => 'something else',
},
# …
);
Тогда, вместо того, чтобы иметь несколько разных массивов и отслеживать, кому из них принадлежит, вы получаете элементы вроде:
Затем, если вы хотите получить максимальную молекулярную массу, вы можете отсортировать идентификаторы по их молекулярной массе, а затем выделить самую высокую:
my $highest = (sort {
$protein_entries{$a}{molecular_weight}
<=>
$protein_entries{$b}{molecular_weight}
} keys %protein_entries)[1];
У вас проблемы с вашим алгоритмом, потому что вы в основном не правильно структурируете свои данные.
В этом примере $highest
будет содержать def
, затем вы можете вернуться назад и получить $protein_entries{def}{molecular_weight}
или любой из других ключей в анонимном хеше, на который ссылается $protein_entries{def}
, таким образом, можно легко вызвать любой соответствующие связанные данные.