1

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

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

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

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

复制 to 的元素以获得以下内容的最佳方法是什么,@data@fields无需迭代和使用数组索引。

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

2 回答 2

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;
于 2013-04-09T07:10:23.487 回答
3

如果这是在单个散列引用中,散列切片会起作用。但是,由于您必须跨多个哈希引用填充特定字段,因此需要一个循环。

use List::Util 'min';

$fields[$_]->{value} = $data[$_] for 0 .. min( $#fields, $#data );
于 2013-04-09T07:13:15.357 回答