2010-10-05 95 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 =(); 

创建空数组/散列:

​​