2009-10-27 75 views

回答

12

從技術上講,這不是數組散列。這是數組引用的散列。因此,您應該使用@{...}運算符將其取消引用,並(可選)強制標量上下文將數組轉換爲其長度。

scalar @{$HoA{teletubbies}} 
+0

的必須提到http://perlmonks.org/?node=References+quick+reference – ysth 2009-10-28 01:17:12

+0

perldsc和perllol使用「數組散列」,「數組陣列」等命名法。任何寫'%HoA'的人都可能讀過perldsc。我自己不喜歡它,但是......它太大了無法戰鬥;) – hobbs 2009-10-28 10:56:23

6

您可以通過在標量上下文中評估它來獲取Perl中數組的大小。

例如,你可以做到這一點明確,如:

my $size = scalar @{$HoA{teletubbies}}; 

但你也可以做到這一點隱含在這種情況下:

my $size = @{$HoA{teletubbies}}; 

這是Perl中,你也可以做這樣的:

my $size = $#{$HoA{teletubbies}} + 1; 

#運算符返回數組的最後一個索引,所以添加一個t它會給你它的大小)。

+0

最後一個是額外的工作,一目瞭然難以閱讀。在某些情況下,沒有真正的理由去尋找「更多的方式」來做到這一點。 – Telemachus 2009-10-27 18:04:19

+0

最後一個也在5.10中棄用。 – sebthebert 2009-10-27 20:47:44

+0

'$#'告訴你什麼取決於'$ ['。的值。 – 2009-10-27 21:13:39

0

如果你想要做整個哈希,然後只需添加更多一點吧:

my $size= 0 ; 
foreach (values %HoA) { $size += @$_ }