perl哈希加载两个映射

时间:2014-03-28 13:01:40

标签: perl hash maps

我正在尝试创建函数哈希。有多个功能,每个功能都将根据一个键调用。函数和键之间存在一对多的关系。以下工作,但似乎效率低下。 (请注意,我有更多要加载的函数,但有两个函数说明了这一点。)

以下工作但似乎效率低下,尤其是在处理多个功能时(两个看起来不那么糟糕):

my %funcs = ( map {$_ => \&gt_3} qw (PH DO PWL DEPTH BARO ABSP));
%funcs = (%funcs,
   map {$_ => \&lt_one_third} qw (SPCO SALT RHUM));

我想做的是:

my %funcs = (map  {$_ => \&gt_3} qw (PH DO PWL DEPTH BARO ABSP),
   map {$_ => \&lt_one_third} qw (SPCO SALT RHUM));

我只是不明白为什么第一个有效,第二个没有。在我看来,在每种情况下,右侧都会创建两个哈希值。

由于

2 个答案:

答案 0 :(得分:1)

尝试在map周围(或至少在第一个周围)附加额外的parens

my %funcs = (
   ( map {$_ => \&gt_3} qw(PH DO PWL DEPTH BARO ABSP) ),
   ( map {$_ => \&lt_one_third} qw(SPCO SALT RHUM) ),
);

答案 1 :(得分:1)

你有

my %funcs = (map  {$_ => \&gt_3} qw (PH DO PWL DEPTH BARO ABSP),
   map {$_ => \&lt_one_third} qw (SPCO SALT RHUM));

如果你在map的参数周围添加parens,你会得到:

my %funcs = (map( {$_ => \&gt_3} qw (PH DO PWL DEPTH BARO ABSP),
   map({$_ => \&lt_one_third} qw (SPCO SALT RHUM))));

如果你清理它,你会得到:

my %funcs = (
   map({ $_ => \&gt_3 }
      qw( PH DO PWL DEPTH BARO ABSP ),
      map({ $_ => \&lt_one_third }
         qw( SPCO SALT RHUM ),
      ),
   )
);

如您所见,您将以下内容传递给第一张地图:

'PH', ..., 'SPCO', \&lt_one_third, 'SALT', \&lt_one_third, 'RHUM', \&lt_one_third

您需要做的就是将地图放在地图的args周围:

my %funcs = (
   map( { $_ => \&gt_3          } qw( PH DO PWL DEPTH BARO ABSP ) ),
   map( { $_ => \&lt_one_third  } qw( SPCO SALT RHUM ) ),
);

大多数人不知道你可以在地图的args周围使用parens,所以他们将使用以下内容:

my %funcs = (
   ( map { $_ => \&gt_3          } qw( PH DO PWL DEPTH BARO ABSP ) ),
   ( map { $_ => \&lt_one_third  } qw( SPCO SALT RHUM ) ),
);

那也没关系。