首页 > 解决方案 > 从哈希perl中的数组中获取唯一的值列表

问题描述

我有一个包含数组列表的哈希,我必须从该数组中获取一个唯一列表。但是当我试图识别时,我没有收到任何错误或唯一列表。

注意:我不想使用任何模块

下面是我的哈希的示例结构,其中包含数组:

'15445' => { 'str' => {
                        'TOKEN' => [
                           'HC',
                           'HC',
                           'HC',
                           'HC',
                           'HC',
                           'HC'
                            ]
                }
        }

我如何从数组中获取唯一的值列表TOKEN

foreach my $id (keys %$client) {
    my @unique_srp_id;
    @unique_srp_id = uniq($hash->{$id}->{str}->{TOKEN});
    print @unique_srp_id;
}

sub uniq {
    my %seen;
    grep !$seen{$_}++, @_;
}

谁能建议我在这里做错了什么。

标签: perl

解决方案


您正在将包含值的数组引用传递给函数,但该函数需要直接在@_.

my @unique = uniq(@{$hash->{$id}{str}{TOKEN}});

在 Perl 5.24+ 上,您可以使用 postderef 使它看起来更好(也许?)

my @unique = uniq($hash->{$id}{str}{TOKEN}->@*)

在 Perl 5.26+ 上,List::Util 的核心版本足够新(1.45)以包含该uniq函数,它将比您的纯 perl 版本更快,并且可以undef清楚地处理值。


推荐阅读