簡體   English   中英

如何在Perl中初始化2D數組?

[英]How can I initialize a 2D array in Perl?

如何在Perl中初始化2D數組?

我正在嘗試以下代碼:

 0 use strict;
10 my @frame_events = (((1) x 10), ((1) x 10));
20 print "$frame_events[1][1]\n";

但它給出以下錯誤:

在./dyn_pf.pl第20行使用“strict refs”時,不能使用字符串(“1”)作為ARRAY引用。

這種語法似乎只是初始化一維數組,因為打印“$ frame_events [1] \\ n”有效。 雖然Perl在分配期間沒有給出任何錯誤。

你不能在Perl中有一個數組數組,只有一個數組引用數組。

my @frame_events = ([(1) x 10], [(1) x 10]);
print "$frame_events[1]->[1]\n";

特殊情況:您可以省略相鄰括號之間的指針解引用箭頭(無論是方形還是卷曲):

print "$frame_events[1][1]\n";

一般來說,你不能有:

  • 數組數組(數組......)
  • 哈希數組(......)
  • 數組哈希
  • 哈希的哈希。

可以

  • 對數組的引用數組(對數組的引用 ...)
  • 哈希引用數組( 引用 ...)
  • 數組引用的哈希值
  • 以哈希引用的哈希

你也可以:

  • 標量數組
  • 標量數組的引用數組
  • 標量數組引用數組的引用數組
  • 標量散列的引用數組
  • 等等

在Perl中,一個包含兩個數組的數組將合並為一個數組。 如果不希望它們連接,您需要內部數組的引用。 這是您的代碼轉儲:

use strict;
use Data::Dumper;
my @frame_events = (((1) x 10), ((1) x 10));
print Dumper(\@frame_events);

結果:

$VAR1 = [
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1
        ];

如果你切換到數組引用創建者,括號而不是父代,使用此代碼:

use strict;
use Data::Dumper;
my @frame_events = ([(1) x 10], [(1) x 10]);
print Dumper(\@frame_events);

你得到這個:

$VAR1 = [
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ],
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ]
        ];

最快的方法是使用push命令。

$ size = 10; 推送@matrix,[(0)x $ size]為(0 .. $ size);

這將創建一個用零初始化的10x10數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM