perl - 加入相同的数组值哈希
问题描述
我有一个带有特定数据集的哈希。我需要操纵哈希值,以便获得如下结果:
预期输出:
key_1=Cell1
Val_1=C3#C4#C1#C2
脚本:
#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;
use List::Util qw /uniq/;
my %hash = (
'Cell1' => {
'A' => [ 'C1','C2','C1','C2' ],
'B' => [ 'C3','C3','C4','C4' ]
}
);
print Dumper(\%hash);
my $i = 0;
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
foreach my $refs (keys %{ $hash{$key} }) {
print "Val_$i=", join('#', uniq @{$hash{$key}{$refs}})."\n";
}
}
电流输出:
key_1=Cell1
Val_1=C3#C4
Val_1=C1#C2
我怎样才能在这里得到预期的输出?
解决方案
@cells
您可以在打印之前使用附加数组 ( ) 来存储值:
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
my @cells;
foreach my $refs (keys %{ $hash{$key} }) {
push @cells, @{$hash{$key}{$refs}};
}
print "Val_$i=", join('#', uniq @cells)."\n";
}
印刷:
key_1=Cell1
Val_1=C3#C4#C1#C2
由于您从哈希中检索密钥,因此无法保证顺序。您可以使用sort
使订单可预测。
推荐阅读
- django-models - 在 Django Admin 中管理外键关系
- qt - 多个安装目标的文件部分未正确部署到设备
- angular - 保存角度形式数据 - 弹簧靴杰克逊错误
- php - 为什么在“page.php”之后添加 url “/something/waterver”不会触发 404?
- javascript - 如果另一个元素已经聚焦,你如何聚焦 body 元素?
- python - 在训练有素的 LGBM 模型上测试新数据
- r - 使用来自其他两列的数据在 R 中创建一列
- html - 如何隐藏内容的内容(字体真棒)
- r - 如何使用 R/Shiny 更改 dateRangeInput 的样式/显示?
- java - 带有添加天数的常规字符串到日期转换