【发布时间】:2010-04-08 15:30:16
【问题描述】:
我正在构建一个散列,其中与标量关联的键不一定是唯一的。期望的行为是,如果键是唯一的,则值是标量。如果键不是唯一的,我希望该值是与键关联的标量的数组引用。由于哈希是迭代建立的,我不知道密钥是否是唯一的。现在,我正在做类似的事情:
if(!defined($hash{$key})){
$hash{$key} = $val;
}
elseif(ref($hash{$key}) ne 'ARRAY'){
my @a;
push(@a, $hash{$key});
push(@, $val);
$hash{$key} = \@a;
}
else{
push(@{$hash{$key}}, $val);
}
有没有更简单的方法来做到这一点?
【问题讨论】:
-
从可维护性和简单性的角度来看,假设所有键都不唯一并让每个键成为数组引用不是更容易吗?即使该 arrayref 包含一个元素?转换为更少的
if ( ref $x eq 'ARRAY')样板文件。 -
@rjh 这是一个非常公平的观点。对于我的特定案例,我需要考虑这将如何在更大的图景中发挥作用,但我同意总的来说这是有道理的。它类似于 R 处理事物的方式。这是更复杂结构的一部分,重复键相当少见。我会考虑的。