【发布时间】:2021-02-04 17:02:24
【问题描述】:
下面的哈希包含一些节点数据。
%Main_hash、%SC_Hash 和 %Cell_Hash。
我想使用哈希映射从这些哈希中打印 Equipment(S_<count>) 及其各自的 Cells(C_<count>)。
这是我的脚本:
use strict; use warnings;
use Data::Dumper;
my %Main_hash = ( 'Network=Test,Equipment=2' => [ 'A', 'B' ],
'Network=Test,Equipment=3' => [ 'X', 'Y' ],
'Network=Test,Equipment=1' => [ 'D', 'F' ]);
my %SC_Hash = ( 'Network=Test,Carrier=3' => 'Network=Test,Equipment=3',
'Network=Test,Carrier=1' => 'Network=Test,Equipment=1',
'Network=Test,Carrier=2' => 'Network=Test,Equipment=2');
my %Cell_Hash = ( 'Network=Test,Cell=34' => [ 'Network=Test,Carrier=1' ],
'Network=Test,Cell=31' => [ 'Network=Test,Carrier=1' ],
'Network=Test,Cell=37' => [ 'Network=Test,Carrier=3' ]);
my $count = 0;
foreach my $equipment (sort keys %Main_hash){
$count++;
print "S_$count=$equipment\n";
my ($k) = grep { $SC_Hash{$_} =~ /$equipment/ } keys %SC_Hash;
print "C_$count=$k\n";
}
我在这里得到这样的输出(当前输出):
S_1=Network=Test,Equipment=1
C_1=Network=Test,Carrier=1
S_2=Network=Test,Equipment=2
C_2=Network=Test,Carrier=2
S_3=Network=Test,Equipment=3
C_3=Network=Test,Carrier=3
但我期待输出如下:
S_1=Network=Test,Equipment=1
C_1=Network=Test,Cell=31###Network=Test,Cell=34
S_2=Network=Test,Equipment=2
C_2=NA
S_3=Network=Test,Equipment=3
C_3=Network=Test,Cell=37
如果您看到当前输出,对于 C_1 其打印 Network=Test,Carrier=1。但它应该在%Cell_Hash 中查找Network=Test,Carrier=1 的密钥并打印其密钥(即Network=Test,Cell=31 和Network=Test,Cell=34)。
- 如果特定的运营商与
%Cell_Hash的多个键匹配,则应打印以###分隔,如预期输出中C_1的值所示。 - 对于
C_2,值为Network=Test,Carrier=2,在%Cell_Hash的任何数组值中都不存在。这导致Network=Test,Carrier=2在%Cell_Hash哈希中不存在密钥。它应该在C_2中将值打印为NA,如预期输出所示。
【问题讨论】:
-
这与您的earlier question 相同。您需要按设备分组的单元格,因此请创建该单元格
-
@ikegami 是的,但是关系很简单,这里我还有 2 个哈希来获取关系。
-
啊,你试过了吗?你在哪里尝试过? /// 但是不,它并没有真正变得更复杂。事实上,它几乎是相同的。你真的只需要按运营商分组的单元格,这正是前面问题所回答的。您已经可以轻松查找运营商的设备了。
-
@ikegami 我可以用当前输出中显示的载体映射设备。但是从载体到细胞对我来说似乎很复杂,因为它在数组的散列中:|
-
你之前的问题也是一个 AoH。