2010-10-05 97 views
-5

這不是通用的問題。我問過這個問題,因爲我對創建Perl數組感到困惑。如何在Perl中創建數組和哈希值?

  1. 如何創建或定義數組或散列?還有什麼其他方法可以做到這一點?
  2. 如何清除數組或散列?還有什麼其他方法可以做到這一點?
  3. 如何用空元素創建數組或散列?
  4. 什麼是用out值創建散列的方法?
+9

正如您向您建議的無數次,您需要坐下來閱讀文檔並閱讀一些入門書籍。 [「學習Perl」](http://en.wikipedia.org/wiki/Learning_Perl)非常出色,並且對您的益處遠不止於要求諸如此類的開放式問題。 – Ether 2010-10-05 16:40:49

回答

2

詞彙數組和散列創建空的。您可以創建一個新的詞彙數組或哈希與my

my @array; 
my %hash; 

在大多數情況下,你應該只使用詞彙數組和哈希,但您可以創建封裝陣列或our哈希:

our @array; 
our %hash; 

@array%hash在這種情況下可能有也可能沒有數據(如果它們是以前創建的,則不會清除它們的內容)。這些變量的名稱是詞法範圍的,但數據包範圍的,所以如果你說:

{ 
    our @a = (1 .. 5); 
} 
{ 
    our @a; 
    print "@a\n"; 
} 

它仍然會打印"1 2 3 4 5\n"

有很多方法可以清除散列或數組。最常見的是指定一個空列表吧:

@array =(); 
%hash =(); 

您還可以使用undef清除散列或數組:

undef @array; 
undef %hash; 

你也可以popshift,或splice項關閉的陣列:

pop @array while @array; 
shift @array while @array; 

splice @array, 0, scalar @array; 

也可以通過分配一個號碼到$#array修改元件的數目和陣列它的名字的形式。如果您指定一個負值,陣列將被清空:

$#array = -1; 
+1

+1:你是一個非常有耐心的人... – 2010-10-05 20:37:56

+0

@ carrot-top多麼好的方式來描述我的病情。 – 2010-10-05 22:27:03

5

如果您在使用此類基礎知識時遇到問題,您應該查看perldoc perlsyn。它涵蓋了語言的語法,並且應該告訴你你需要什麼。

1

可以通過分配列表(包括空列表)創建數組和散列:

my @a1; # empty array 
my @a2 = 'a'; 

mh %h1; # empty hash 
my %h2 = 'a'; # a => undef 
my %h3 = ('a', 'b'); # 'a' => 'b' 
my %h4 = (a => 'b'); # 'a' => 'b' 

可以清除通過顯式指定一個空列表數組或哈希:

@a2 =(); 
%h3 =(); 
0

它聽起來像你可以從Perl tutorials and beginners guides中獲益。有很多例子可以完全滿足你的要求。

要記住的一件事是哈希和數組幾乎是相同的(概念上),但數組是通過整數索引的,並且哈希是由字符串索引的。在語法上,你引用這些指數的方式不同,但從概念上講,這就是你如何看待它們的方法。

+1

我會添加一個其他區別:數組是有序的,哈希是無序的。也就是說,如果你遍歷一個給定的數組,你將總是以相同的順序返回項目,但是哈希不能保證['keys']返回的值的順序(http:// perldoc .perl.org/functions/keys.html),['values'](http://perldoc.perl.org/functions/values.html)或['each'](http://perldoc.perl。 org/functions/each.html)。 – 2010-10-05 16:51:07

+0

是的,這是一個很好的觀點。當然,還有其他許多不同之處,但這兩個可能對於試圖解決主要差異的人來說很有意義。 – CanSpice 2010-10-05 16:55:42

0

創建陣列:

my @array = (1, 2, 3, 4); 

創建哈希:

my %hash = (
    one => 1, 
    two => 2, 
    three => 2, 
    four => 2, 
); 

清除數組或哈希:

@array =(); 
%hash =(); 

創建空數組/散列:

​​