如何在perl中以特定顺序打印哈希

时间:2016-01-05 10:07:03

标签: perl hash printing

我有一系列哈希。

输出:

$VAR1 = {
      'Name' => 'Bob',
      'Address' => 'Home',
      'DOB' => '01/01/1990',
      'Sex' => 'M',
    };
$VAR2 = {
      'Name' => 'Mary',
      'Address' => 'Home',
      'DOB' => '01/01/1990',
      'Sex' => 'F',
    };

我打印到xml文件。但是,当我将此数组打印到xml文件时,我得到:

<Record Address=Home DOB=01/01/1990 Name=Bob Sex=M />

我更喜欢姓名,地址,DOB,性别。

<Record Name=Bob Address=Home Sex=M DOB=01/01/1990 />

按键或键值对数组进行排序也不会使值按正确顺序排列。是否有一个简单的解决方案以所需的顺序打印哈希?

1 个答案:

答案 0 :(得分:6)

哈希是explicitly unordered。所以不,你不能这样做。只有两种维持秩序的方式(使用hash):

  • 使用数组强制使用hash slice进行排序。
  • 使用按所需顺序返回键的排序功能。

类似的东西:

my @fields = qw (  Name Address DOB Sex );
my @ordered_values = @hash{@fields}; 

或者只是一个简单的:

foreach my $key ( @fields ) {
    print "$key=$hash{$key} "; 
}

虽然,如果您正在使用XML ...它可能是更好的方法来处理源数据,而不是首先将其填充到哈希中。

我会注意到 - 在编写XML时,您通常不会内联XML内容中的键值,而是作为属性(或子元素):

<Record Address="Home" DOB="01/01/1990" Name="Bob" Sex="M" />

或者:

<Record>
   <Address>Home</Address> 
   <DOB>01/01/1990</DOB>
   <Name>Bob</Name>
   <Sex>M</Sex>
</Record>

因为通过这样做,您可以使用XML查询工具来匹配特定条件(如xpath)。