Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何添加重复密钥';将值放入Perl中的键:[值数组]_Perl_Hash_Collision - Fatal编程技术网

如何添加重复密钥';将值放入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);