关于数据结构的Perl查询

时间:2012-01-03 02:07:50

标签: perl data-structures hash perl-data-structures

我目前使用以下哈希工作正常

%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 个答案:

答案 0 :(得分:10)

写下这个:

%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"

答案 1 :(得分:0)

很难确切地说出你正在寻找的问题。我怀疑散列哈希就足够了。你可以这样设置:

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

要获取值,您可以执行以下操作:

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

您可以添加其他值,如下所示:

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