如何添加重复密钥';将值放入Perl中的键:[值数组]
我正在尝试向哈希中的数组添加值,以避免冲突 想象一下这样以键值对进行读取:如何添加重复密钥';将值放入Perl中的键:[值数组],perl,hash,collision,Perl,Hash,Collision,我正在尝试向哈希中的数组添加值,以避免冲突 想象一下这样以键值对进行读取: my %color_of = ( apple => "red", orange => "orange", apple => "green", ); 如何将apple的值附加到这样的值数组中 my %color_of = ( apple => ["red", "green"], orange => "orange", ); 编辑:正如建议的那样
my %color_of = (
apple => "red",
orange => "orange",
apple => "green",
);
如何将apple
的值附加到这样的值数组中
my %color_of = (
apple => ["red", "green"],
orange => "orange",
);
编辑:正如建议的那样,为碰撞创建的更好的数据结构是:
my %color_of = (
apple => ["red", "green"],
orange => ["orange"],
);
这允许将所有值推送到键的数组中 当考虑从一个SQL查询返回值时,该查询本身如下所示:
[[apple, "red"], [orange, "orange"], [apple, "green"]]
我找到了一个解决这个问题的好方法,比我帖子上评论的方法简单得多
my %hash;
foreach my $res (@rs)
{
push @{$hash{$res->[0]}}, $res->[1];
}
如果您不想销毁@对
:
my %color_of = sub{ my %h; push@{ $h{shift()} }, shift while@_; %h }->(@pairs);
生成
(苹果=>[“红色”、“绿色”]、橙色=>[“橙色”])
会更容易。在您提出的方案中,如何区分具有多个值的键和具有单个值的键(即arrayref)?这创建了我在评论中提到的数据结构((苹果=>[“红色”、“绿色”]、橙色=>[“橙色”)
)。这就是你需要的吗?是的!这就是我要找的。这就是为什么我在最初的问题中提供了我想要的示例数据结构;它有orange=>“orange”
,而不是orange=>[“orange”]
@landesko,这正是人们在评论中试图告诉你的……它并没有“完全关闭”。这是一个链接,指向创建数组散列的各种方法,包括您使用的方法:push@{$HoA{“flintstones”}、“wilma”、“betty”代码>列表::MoreUtils natatime可以作为非破坏性程序的替代品。@landesko根据您的原始帖子,这是迄今为止唯一可行的答案。
my %color_of = sub{ my %h; push@{ $h{shift()} }, shift while@_; %h }->(@pairs);