我有一个包含数组列表的哈希,我必须从该数组中获取唯一列表。但是当我尝试ID时,我没有收到任何错误或唯一列表。
注意:我不想使用任何模块。
下面是我的哈希表的示例结构,其数组为:
{
"data": {
"user": null
}
}
我如何从数组'15445' => { 'str' => {
'TOKEN' => [
'HC',
'HC',
'HC',
'HC',
'HC',
'HC'
]
}
}
中获取唯一值列表
TOKEN
谁能建议我我在这里做什么错
答案 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]};
}