perl - 从哈希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{$_}++, @_;
}
谁能建议我在这里做错了什么。
解决方案
您正在将包含值的数组引用传递给函数,但该函数需要直接在@_
.
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
清楚地处理值。
推荐阅读
- assembly - 检查一个数字是否是偶数
- c++ - 如何验证输入是 C++ 中两个数字之间的整数?
- javascript - 如何在jQuery中弹出对话框?
- python - 变压器:无法从“变压器”导入名称“AutoModelWithLMHead”
- reactjs - 如何定义这个接口Props,使这个Props包含传入组件的所有属性
- sql - 未从 Parquet 文件填充 Redshift 表
- python - 如何将列表中的列表与列表推导相乘
- node.js - 节点:dns.resolve 调用 dns.setServers 后无法获取正确的 ip
- python - 如何读取、复制或粘贴合并的 Excel 单元格?
- go - 摄取 .sql 文件并更改 sql 语句参数