perl - 在 perl 中推送到数组之前检查哈希值
问题描述
为了创建一个 Json 文件,我在数组中推送一个哈希值,但是现在值被重复了,我不想添加那些已经在数组中的哈希值。
foreach my $corp_id(@{corpId}) {
foreach my $rcode(@{$brands_map->{$corp_id->{s_brand}}}) {
my corpIdAccessCode;
$corpIdAccessCode->{accessCode} = $corp_id->{s_id};
$corpIdAccessCode->{corporateId} = $corp_id->{c_id};
$corpIdAccessCode->{bcode} = $rcode;
push @{$accessCode_array} ,$corpIdAccessCode; **// Here before pushing to array i want to have a check wheather $corp_id->{s_id}, $corp_id->{c_id} and $rcode already exists or not in the accessCode_array**
}
}
所以从下面的哈希数组中我不想要重复的
[
{
"accessCode": "NQ",
"bcode": "PD",
"corporateId": "12"
},
{
"accessCode": "NQ",
"bcode": "CI",
"corporateId": "2122121"
},
{
"accessCode": "NQ",
"bcode": "CI",
"corporateId": "2122121"
},
{
"accessCode": "CD",
"bcode": "PD",
"corporateId": "12"
},
代码更改的最终输出应给出如下结果:
[
{
"accessCode": "NQ",
"bcode": "PD",
"corporateId": "12"
},
{
"accessCode": "NQ",
"bcode": "CI",
"corporateId": "2122121"
},
{
"accessCode": "CD",
"bcode": "PD",
"corporateId": "12"
},
或者有什么方法可以从数组中删除重复的哈希值。
解决方案
在之后推送或删除重复项之前检查整个数组是低效的。所以你需要跟踪你已经推送了哪些数据:
my $seen;
foreach my $corp_id(@{corpId}) {
foreach my $rcode(@{$brands_map->{$corp_id->{s_brand}}}) {
my ($k1, $k2, $k3) = ($corp_id->{s_id}, $corp_id->{c_id}, $rcode);
if ($seen->{$k1}->{$k2}->{$k3}) {
next;
}
$seen->{$k1}->{$k2}->{$k3} = 1;
my $corpIdAccessCode;
$corpIdAccessCode->{accessCode} = $corp_id->{s_id};
$corpIdAccessCode->{corporateId} = $corp_id->{c_id};
$corpIdAccessCode->{bcode} = $rcode;
push @{$accessCode_array} ,$corpIdAccessCode; **// Here before pushing to array i want to have a check wheather $corp_id->{s_id}, $corp_id->{c_id} and $rcode already exists or not in the accessCode_array**
}
}
my ($k1, $k2, $k3)
只是为了使它更短,更具可读性。
推荐阅读
- google-apps-script - 如何从谷歌表格中的 URL 列中获取文件名
- c++ - Microsoft Visual Studio 2017 文本颜色是否损坏?
- c# - c#项目转移到其他PC
- php - 需要帮助从 db 到 php 获取 count() 的结果
- vue.js - VueJs:使用 vue-router 的两个独立且独立的路由/视图
- c++ - OpenSSL 服务器无法通过写入之间的延迟来处理客户端断开连接
- ruby-on-rails - 使用 Rails ActiveStorage 删除旧变体
- html - 带有 HTML 和 Javascript 的 SVG 或 Canvas 机器控制面板
- python - 如何使用字典扫描列表的部分外观?
- html - Node JS 使用 css 提供 html 文件