从哈希Perl中的数组获取唯一值列表

时间:2019-02-11 21:18:02

标签: perl

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

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

下面是我的哈希表的示例结构,其数组为:

{
  "data": {
    "user": null
  }
}

我如何从数组'15445' => { 'str' => { 'TOKEN' => [ 'HC', 'HC', 'HC', 'HC', 'HC', 'HC' ] } } 中获取唯一值列表

TOKEN

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

2 个答案:

答案 0 :(得分:4)

您正在将包含值的数组引用传递给函数,但函数直接在@_中期望值。

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价值观。

答案 1 :(得分:2)

uniq需要一个列表,但是$hash->{$id}->{str}->{TOKEN}是一个数组引用(单个元素)。要么将数组传递到uniq

 uniq(@{$hash->{$id}{str}{TOKEN}})

或写uniq以期望得到数组引用

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