Perl-запрос о структуре данных - PullRequest
0 голосов
/ 03 января 2012

В настоящее время я использую следующий хеш, который отлично работает

%hash = ( 
    'env1' => 'server1:port1, server11:port11',
    'env2' => 'server2:port2, server22:port22'
) ;

Однако я действительно хочу создать следующую структуру данных, которая облегчит мне извлечение информации.Очевидно, что следующее не работает.

(
  env1 => "server=server1, port=port1", "server=server11, port=port11",
  env2 => "server=server2, port=port2", "server=server22, port=port22"
) ;

Интересно, есть ли у кого-нибудь предложения по созданию структуры данных, которая бы соответствовала моим требованиям.

Ответы [ 2 ]

10 голосов
/ 03 января 2012

Напишите это:

%hash = (
  env1 => ["server=server1, port=port1", "server=server11, port=port11"],
  env2 => ["server=server2, port=port2", "server=server22, port=port22"]
) ;

И затем получите доступ к таким элементам:

$hash{'env1'}->[0] == "server=server1, port=port1"
$hash{'env2'}->[1] == "server=server22, port=port22"

Это хэш, где значения являются ссылками на анонимные массивы.

Но когда я смотрю на ваши данные, я думаю, что, может быть, есть лучший способ сохранить их:

%hash = (
  env1 => [{'server' => 'server1', 'port' => 'port1'}, {'server' => 'server11', 'port' => 'port11'}],
  env2 => [{'server' => 'server2', 'port' => 'port2'}, {'server' => 'server22', 'port' => 'port22'}]
) ;

И затем обращаться к таким элементам:

$hash{'env1'}->[0]->{'server'} == "server1"
$hash{'env2'}->[1]->{'port'} == "port22"
0 голосов
/ 03 января 2012

Трудно сказать точно, что вы ищете, задав вопрос.Я подозреваю, что достаточно хэша хэшей.Вы бы настроили его так:

%hash = ( 'env1' => { 'server' => 'server1', 'port' => 'port1' }, 
          'env2' => { 'server' => 'server2', 'port' => 'port2' } );

Чтобы получить значения, вы должны сделать что-то вроде этого:

print $hash{'env2'}->{'server'};

Вы можете добавить дополнительные значения, например:*

$hash{'env3'} = {'server' => 'server3', 'port' => 'port3'};
...