将数组元素复制到哈希

时间:2013-04-09 07:03:10

标签: perl

我有一个具有以下结构的Hashes数组:

@fields 
(
 {
   "id" => "Name",
   "type" => "Text",
   "value" = undef,
 },
 {
   "id" => "DOB",
   "type" => "Date",
   "value" = undef,
 },
);

我有一个包含以下元素的数组:

@data = ("John", "10/10/1970");

@data的元素复制到@fields以获得以下内容而不必迭代和使用数组索引的最佳方法是什么。

@fields 
(
 {
   "id" => "Name",
   "type" => "Text",
   "value" = "John",
 },
 {
   "id" => "DOB",
   "type" => "Date",
   "value" = "10/10/1970",
 },
);

2 个答案:

答案 0 :(得分:3)

也许您应该将@fields改为哈希,这样您就可以轻松地按名称检索字段。

use warnings;
use strict;

my %fields =  
(
    Name => {
        type  => "Text",
        value => undef,
    },
    DOB => {
        type  => "Date",
        value => undef,
    },
);

my @data = ("John", "10/10/1970");

$fields{Name}->{value} = $data[0];
$fields{DOB}->{value} = $data[1];

use Data::Dumper;
print Dumper %fields;

答案 1 :(得分:3)

如果哈希切片位于单个哈希引用中,则它将起作用。但是,由于必须跨多个哈希引用填充特定字段,因此需要一个循环。

use List::Util 'min';

$fields[$_]->{value} = $data[$_] for 0 .. min( $#fields, $#data );