perl – 更清洁的方式来存储用数组ref替换标量哈希值?
发布时间:2020-12-16 06:22:00 所属栏目:大数据 来源:网络整理
导读:我正在构建一个散列,其中与标量相关联的键不一定是唯一的.期望的行为是,如果键是唯一的,则值是标量.如果密钥不是唯一的,我希望该值是与密钥关联的标量的数组引用.由于哈希是迭代构建的,我不知道密钥是否是提前唯一的.现在,我正在做这样的事情: if(!defined(
我正在构建一个散列,其中与标量相关联的键不一定是唯一的.期望的行为是,如果键是唯一的,则值是标量.如果密钥不是唯一的,我希望该值是与密钥关联的标量的数组引用.由于哈希是迭代构建的,我不知道密钥是否是提前唯一的.现在,我正在做这样的事情:
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); } 有更简单的方法吗? 解决方法
rjh是对的钱.
我写了太多的代码,完全按照你的描述编写 – 哈希值是一个数组引用,除非它不是.大量和条件类型检查.然后有一天它打了我,“我为什么要写这些废话?只是到处使用阵列参考,虚拟”我对自己说.从那天起,当我在公园散步时,蓝鸟从树上飞下来向我唱歌. push @{$hash{$key}},$val; 这就是你要做的一切.如果密钥不存在,则数组将自动生成. 如果你不喜欢autoviv,并希望明确做到: $hash{$key} = [] unless exists $hash{$key}; push @{$hash{$key}},$val; 即使这种“冗长”的方法也要短得多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |