【问题标题】:Perl : creating array of known sizePerl:创建已知大小的数组
【发布时间】:2011-08-27 00:35:11
【问题描述】:


我必须存储使用 Parallel::ForkManager 运行的请求中的数据。
但这不是按顺序排列的,我的意思是,我轮询交换机的所有端口,但其中一些端口的响应速度比其他端口快。所以,我不知道如何保存它,以便稍后显示。

我可以那样做吗?

my @array = ();
$array[10] = "i am a string corresponding to port 10"
$array[2] = "the one for the port 2"
...
print @array;

或者我应该使用带有端口数的 %hash 作为键,但这似乎不是最好的。
谢谢。

【问题讨论】:

    标签: arrays perl variables


    【解决方案1】:

    你可以这样做:

    my @array = ();
    $array[10] = "i am a string corresponding to port 10"
    $array[2] = "the one for the port 2"
    print @array;
    

    但是,如果某些端口没有响应,您将在数组的插槽中出现未填充的 undef 条目。正如你所说,使用哈希会更干净:

    my %hash;
    $hash{10} = "I am port 10";
    $hash{2} = "I am port 2";
    
    foreach my $key (keys %hash) {
       print "$key: $hash{$key}\n";
    }
    

    【讨论】:

      【解决方案2】:

      在 Perl 中,您不必担心数组的大小。它们根据需要增长:

      my @array; # defines an empty array
      
      $array[0] = 4; # array has one element
      $array[9] = 20; # array has 10 elements now
      
      print join "-", @array;
      
      # prints: 4--------20 because the empty places are undef
      

      如果您有很多端口并且担心有太多空条目,请使用哈希。我看不出有什么理由不这样做。

      【讨论】:

      • 它会打印“4 20”,但有更多空格,因为 SE 不会打印这些。
      【解决方案3】:

      哈希是用于“sparse arrays”的良好数据类型。看来您只是在描述它;一个稀疏数组——其中大部分元素都未定义。 Perl 可以让您预先设定标准数组的大小,但这不是您所需要的。你似乎需要一个哈希,如果你有 $array[2]$array[23] 并不重要,但没有任何关系,例如。使用原生数组,一旦创建 $array[23],所有小于 23 的未使用元素都会以 'undef' 作为其值。

      使用哈希,您将拥有$item{2}$item{23}。您可以使用 keys() 函数获取哈希中包含哪些项目的列表。

      【讨论】:

        猜你喜欢
        • 2020-08-03
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2015-12-17
        相关资源
        最近更新 更多