Arrays Perl哈希数组大小
我是Perl新手。我试图确定如何打印数组哈希的大小。下面是我的代码片段Arrays Perl哈希数组大小,arrays,perl,Arrays,Perl,我是Perl新手。我试图确定如何打印数组哈希的大小。下面是我的代码片段 my %map = (); // Initialization while ($line = <>) { chomp($line); // Logic to split the $line push( @{$map{$first_var}}, $rest ); } // Print the amp foreach my $value (sort keys %map)
my %map = (); // Initialization
while ($line = <>) {
chomp($line);
// Logic to split the $line
push( @{$map{$first_var}}, $rest );
}
// Print the amp
foreach my $value (sort keys %map) {
print "$value: @{$map{$value}}\n";
}
我希望确定与每个键(valA、valB、valc)关联的元素数量
我尝试了:print“设施中的节点数:scalar@{$map{$facility1}}\n”代码>
然而,它给出了
valA: scalar (num1 num2 num3 num4)
valb: scalar (num2 num4)
valC: scalar (num1 num3 num4)
我希望输出分别显示valA、valB、valC的4、2、3。我可能误解了,但标量提供了数组的长度
谢谢您需要将打印对账单更改为:
print "Number of nodes in the facility : " . scalar(@{$map{$facility}}) . "\n";
您需要将打印对账单更改为:
print "Number of nodes in the facility : " . scalar(@{$map{$facility}}) . "\n";
函数调用和表达式不会插入双引号字符串*,因此需要执行以下操作之一:
- 断开字符串上下文(例如连接)
- 打印前将结果存储在变量中,并改用该变量
- 使用
以下是每种技术的说明:
use strict;
use warnings;
my %hash = (
foo => [1, 2, 3],
bar => [qw(a b c d e f g)],
baz => [0 .. 99],
);
for my $key (keys(%hash)) {
# concatenation
print "Number of elements for $key: " . @{$hash{$key}} . "\n";
# temporary variable
my $count = @{$hash{$key}};
print "Number of elements for $key: $count\n";
# printf
printf("Number of elements for $key: %d\n", scalar(@{$hash{$key}}));
}
结果:
Number of elements for bar: 7
Number of elements for bar: 7
Number of elements for bar: 7
Number of elements for baz: 100
Number of elements for baz: 100
Number of elements for baz: 100
Number of elements for foo: 3
Number of elements for foo: 3
Number of elements for foo: 3
*有一种黑客可以用来强制执行此操作,但它会严重阻碍代码的可读性,并且可能会导致代码的未来维护者对您产生恶意:
print "Number of elements for $key: ${\(scalar(@{$hash{$key}}))}\n";
或者使用数组引用的同样糟糕的等价物:
print "Number of elements for $key: @{[scalar(@{$hash{$key}})]}\n";
函数调用和表达式不会插入双引号字符串*,因此需要执行以下操作之一:
- 断开字符串上下文(例如连接)
- 打印前将结果存储在变量中,并改用该变量
- 使用
以下是每种技术的说明:
use strict;
use warnings;
my %hash = (
foo => [1, 2, 3],
bar => [qw(a b c d e f g)],
baz => [0 .. 99],
);
for my $key (keys(%hash)) {
# concatenation
print "Number of elements for $key: " . @{$hash{$key}} . "\n";
# temporary variable
my $count = @{$hash{$key}};
print "Number of elements for $key: $count\n";
# printf
printf("Number of elements for $key: %d\n", scalar(@{$hash{$key}}));
}
结果:
Number of elements for bar: 7
Number of elements for bar: 7
Number of elements for bar: 7
Number of elements for baz: 100
Number of elements for baz: 100
Number of elements for baz: 100
Number of elements for foo: 3
Number of elements for foo: 3
Number of elements for foo: 3
*有一种黑客可以用来强制执行此操作,但它会严重阻碍代码的可读性,并且可能会导致代码的未来维护者对您产生恶意:
print "Number of elements for $key: ${\(scalar(@{$hash{$key}}))}\n";
或者使用数组引用的同样糟糕的等价物:
print "Number of elements for $key: @{[scalar(@{$hash{$key}})]}\n";
当您在上提问时,应始终运行问题中的确切代码,并确保所有输出匹配。/
不是perl
中的注释。您的代码无法工作。很抱歉出现//。我在Stackoverflow编辑器中添加了它,以提高代码的可读性。当您在上提问时,应始终运行问题中的确切代码,并确保所有输出匹配。/
不是perl
中的注释。您的代码无法工作。很抱歉出现//。我在Stackoverflow编辑器中添加了它,以提高代码的可读性。