首页 > 解决方案 > 如何在不丢失冗余值的情况下将两个单独的数组合并为 perl 中的哈希?

问题描述

我有两个数组:

@arr  = qw(feature1 feature2 feature3);
@arr2 = qw(prod1 prod2 prod3 prod4);

我需要 perl 中的最终哈希,如下所示:

%hash = {
  feature1 => prod1,
  feature2 => prod2,
  feature3 => qw(prod3 prod4)
};

要合并我使用的两个数组:

@hash{@feat} = @prod;
print Dumper \%hash;

我应该如何实现这一目标?

标签: perl

解决方案


你想要什么是不可能的,因为你不能有一个与feature3键关联的值列表。您需要在那里有一个数组引用。

你不能在一个单一的任务中做到这一点(或者,至少,我想不出一种方法来做到这一点),但这似乎相对简单。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @feat = qw(feature1 feature2 feature3);
my @prod = qw(prod1 prod2 prod3 prod4);

my %hash;

if (@feat == @prod) {
  @hash{@feat} = @prod;
} else {
  @hash{@feat[0 .. $#feat - 1]} = @prod[0 .. $#feat - 1];
  $hash{$feat[$#feat]} = [ @prod[$#feat .. $#prod] ];
}

say Dumper \%hash;

请注意,它假定您的两个数组的长度相同,或者@feat@prod.


推荐阅读