Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl哈希数组大小_Arrays_Perl - Fatal编程技术网

Arrays 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)

我是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) {
    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编辑器中添加了它,以提高代码的可读性。