【问题标题】:Perl Hashed Array SizePerl 散列数组大小
【发布时间】:2016-06-16 01:58:40
【问题描述】:

我是 Perl 的新手。我正在尝试确定如何打印数组哈希的大小。以下是我的代码的 sn-ps。

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: (num1 num2 num3 num4)
valb: (num2 num4)
valC: (num1 num3 num4)

我希望确定与每个键(valA、valB、valc)关联的元素数量。

我试过了:print "Number of nodes in the facility : 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。我可能会误解,但标量提供了数组的长度。

谢谢

【问题讨论】:

  • 当您在 Stack Overflow 上提问时,您应该始终运行问题中的确切代码并确保所有输出都匹配。
  • // 不是perl 中的评论。您的代码无法运行。
  • 对 // 感到抱歉。我在 Stackoverflow 编辑器中添加了它,以提高代码的可读性。

标签: arrays perl


【解决方案1】:

您需要将您的打印语句更改为:

print "Number of nodes in the facility : " . scalar(@{$map{$facility}}) . "\n";

【讨论】:

    【解决方案2】:

    函数调用和表达式不会插入双引号字符串*,因此您需要执行以下操作之一:

    • 脱离字符串上下文(例如连接)
    • 在打印前将结果存储在变量中,并改用该变量
    • 使用printf

    以下是每种技术的说明:

    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
    

    *您可以使用 hack 来强制执行此操作,但它会严重影响代码的可读性,并且可能会导致代码的未来维护者对您不利:

    print "Number of elements for $key: ${\(scalar(@{$hash{$key}}))}\n";
    

    或者使用数组引用的同样糟糕的等价物:

    print "Number of elements for $key: @{[scalar(@{$hash{$key}})]}\n";
    

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2012-08-03
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 2014-05-19
      • 2011-03-13
      • 2014-01-16
      • 2021-08-22
      相关资源
      最近更新 更多