`
deepfuture
  • 浏览: 4400645 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80078
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70055
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103362
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285833
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15014
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67575
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32155
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45991
社区版块
存档分类
最新评论

神奇的Perl-哈希与数组(2)

阅读更多
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

很多情况下,需要几层哈希来存储一个数据表,比如以下学生成绩表:

姓名

物理

化学

数学

张三

85

79

90

李四

77

96

79

王五

86

81

93

这个成绩表需要2层哈希,所谓哈希内插哈希。第1层哈希存储行,即学生姓名。第2层哈希,存储每行的信息,即学生的每门成绩。2层哈希如何结合起来存储学生成绩表,并提供相关访问呢?

首先,我们来解决存储问题。

#1层哈希

my %student;

#2层哈希

%student=(

  张三”=>{“物理”=>85,“化学”=>79,“数学”=>90},

  李四”=>{“物理”=>77,“化学”=>96,“数学”=>79},

  王五”=>{“物理”=>86,“化学”=>81,“数学”=>93},

);

在上述代码中,%student3个键组成:张三、李四、王五,与这些键相关的值则位于花括号中,并含有嵌套的哈希(即:键值对)。张三键的相应值中含有3个嵌套的键:物理、化学、数学,其值分别是857990

李四键的相应值中含有3个嵌套的键:物理、化学、数学,其值分别是779679,王五也同理。

   上述代码还可写成:

 

 

#1层哈希

my %student;

#2层哈希

$student{“张三”}={“物理”=>85,“化学”=>79,“数学”=>90};

$student{“李四”}={“物理”=>77,“化学”=>96,“数学”=>79};

$student{“王五”}={“物理”=>86,“化学”=>81,“数学”=>93};

其次,访问这2层哈希,比如访问王五同学的数学成绩:

第一种方式:

print $student{“王五”}{“数学”};

第二种方式:

my $studentreport=$student{“王五”};#取得第一层HASH

print ${$studentreport }{“数学”};#访问第二层HASH

总结以上方式形成以下2个程序:

1)     perl3-2.pl:

#perl3-2.pl

#1层哈希

my %student;

#2层哈希

%student=(

  "张三"=>{"物理"=>85,"化学"=>79,"数学"=>90},

  "李四"=>{"物理"=>77,"化学"=>96,"数学"=>79},

  "王五"=>{"物理"=>86,"化学"=>81,"数学"=>93},

);

print $student{"李四"}{"化学"};

2)     perl3-3.pl:

#perl3-3.pl

#1层哈希

my %student;

#2层哈希

$student{"张三"}={"物理"=>85,"化学"=>79,"数学"=>90};

$student{"李四"}={"物理"=>77,"化学"=>96,"数学"=>79};

$student{"王五"}={"物理"=>86,"化学"=>81,"数学"=>93};

#访问

my $studentreport=$student{"王五"};
print ${$studentreport}{"物理"};

 

 

其实还有第3种方法,通过PERL的硬引用操作符\完成内嵌哈希的赋值。改写以上代码如下:

#1层哈希

my %student;

#2层哈希

   my %cj=("物理"=>85,"化学"=>79,"数学"=>90);

   $student{"张三"}=\%cj;  

   my %cj=("物理"=>77,"化学"=>96,"数学"=>79);

   $student{"李四"}= \%cj; 

   my %cj=("物理"=>86,"化学"=>81,"数学"=>93);

   $student{"王五"}=\%cj;  

#访问

my $studentreport=$student{"王五"};

 

print ${$studentreport}{"物理"};

 

 

1.     数组

 
3.1 列表
列表是标量的有序集合,但不能把列表看成一个变量,数组才是变量,数组中存储
列表。
列表的构造方法有以下2种:
1)  (元素1,元素2,元素3)
构造由 3个元素组成的列表。元素类型可以不一致,比如: (‘abc’,123,’xyz’) 
2)  qw(字符串 1   字符串 2   字符串3)
构造由 3个字符串组成的列表,做为列表元素的字符串,不必加上引号,且以
空格隔开。 qw构造的列表, Perl会将其中元素视为加上单引号的字符串, 比如: 
qw(abc   xyz)
qw构造中的()实际为定界符,如果你愿意,也可以写成:
qw/abc xyz/            以“/”为定界符

数组声明与赋值

数组声明格式如下:

my  @数组变量名;

数组赋值格式如下:

@数组变量名=(元素1,元素2,元素3…,元素n);

比如,声明学生姓名数组:

my @student;

@student=(“李明”,”张亮”,”王波”,”李安”);

那么对于二维数组,如何处理呢? 比如,一段曲线坐标点集合,可如下声明赋值:

my  @coordinate;

@coordinate=(

[1.2,3.4],

[1.3,3.2],

[1.6,3.9]

);

数组不要求其元素的数据类型一致,以下赋值方式是合法的:

my @myinfo=(“李四”,“湛江广东”,26,198.22);

对于范围数组的赋值,使用“起点..终点”的格式

比如,赋值元素是从010

my @mynum=(0 .. 10);

my @myalpha=(‘a’ .. ‘z’);

my @myalpha=(‘A’ .. ‘Z’);

 

数组元素访问和修改

语法格式如下:

$数组变量名[下标]

其中下标从0开始计数。

例如:

my @mynum=(0 .. 10);

print $mynum[3];#访问数组元素

$mynum[3]=100;#修改数组元素

print $mynum[3];#输出修改后的数组元素

输出结果如下:

3

100

 

 

分享到:
评论

相关推荐

    perl-5.32.1.tar.gz

    - **变量**:Perl支持多种类型的变量,如标量(scalar)、数组(array)、哈希(hash)等,以及引用(reference)机制,允许创建复杂的数据结构。 - **正则表达式**:Perl的正则表达式功能强大且灵活,可以进行模式...

    神奇的perl-最佳Perl入门

    - 哈希拷贝与反转:使用`%hash2 = %hash1`进行拷贝,使用`%hash2 = reverse %hash1`进行反转。 - 哈希赋值:`$hash{$key} = $value`。 #### 哈希内嵌哈希 - 哈希可以作为另一个哈希的值,形成哈希内嵌哈希的结构。...

    perl神奇入门-最佳perl入门读物

    2. **语句终止符**:Perl中的语句通常以分号 `;` 结束,这有助于提高代码的可读性和解析的准确性。 3. **文件扩展名**:Perl程序通常使用 `.pl` 或 `.cgi` 作为文件扩展名。如果Perl脚本作为Apache服务器的CGI程序...

    perl-24学时搞定

    2. **第2学时:Perl的基本构件——数字和字符串** - 数字类型的理解,如整型和浮点型。 - 字符串的定义、操作和字符串函数,如`length`、`substr`和`index`。 - 字符串连接、比较和模式匹配的概念。 3. **第3...

    Note of Learning Perl--Hashes

    在实际编程中,哈希常与数组配合使用,例如,存储关联数组的索引信息,或者创建索引哈希来加速数组的查找。 七、哈希引用 当哈希的大小非常大,或者需要作为参数传递时,可以使用引用。哈希引用通过`%{}`符号创建...

    ActivePerl-5_ActivePerl5.28_ActivePerl_源码.zip

    Perl的特点包括强大的正则表达式支持、内置数组和哈希数据结构、以及灵活的语法,使得它在处理文本和脚本任务上表现出色。 二、ActivePerl概述 ActivePerl是由ActiveState公司开发的Perl实现,它提供了一个稳定的...

    Perl开发环境.zip

    例如,`if`语句、`for`和`while`循环、数组和哈希数据结构、子程序(subroutine)定义、模块导入等。同时,熟悉一些常用模块如`DateTime`(日期和时间操作)、`DBI`(数据库接口)、`LWP::UserAgent`(HTTP客户端)...

    ActivePerl-x86

    5. **变量和数据类型**:Perl支持多种数据类型,包括标量(如数字和字符串)、数组、哈希(关联数组)以及引用。Perl的变量通常以$、@或%符号开头,分别对应标量、数组和哈希。 6. **正则表达式**:Perl中的正则...

    Perl与JS的对比分析(数组、哈希)

    下面我们将详细对比分析Perl和JS在数组和哈希操作上的区别。 一、数组 1. **数组操作**:在Perl中,数组可以通过`pop`和`push`进行尾部操作,通过`shift`和`unshift`进行头部操作。此外,`splice`函数可以在任意...

    perl二维哈希

    Perl中的二维哈希,也称为关联数组的嵌套,是一种数据结构,允许你在一个哈希中存储另一个哈希。这使得处理多级或复杂的数据结构成为可能,特别适合于需要组织多个相关数据集的情况。在Perl中,哈希通常用百分号 `%`...

    mastering-perl-scripts.zip

    2. **字符串与数组操作**:Perl擅长处理文本,字符串操作和数组处理是其强项。学会如何操作字符串,以及如何使用数组和关联数组(哈希)进行数据存储和检索,对于编写脚本至关重要。 3. **文件和目录操作**:Perl...

    Perl-5.18.2

    2. **数组和哈希的改变**:此版本中,Perl对数组和哈希的操作进行了优化,提高了访问速度,同时也引入了一些新的语法糖,如`push @array, $_ for @another_array;`这样的并行赋值。 3. **开关选项和警告**:Perl ...

    perl-pocket-ref-5.004.1.pdf

    Perl内置了一些用于操作数组和哈希的函数。 - **push`、`pop**:向数组添加或移除元素。 - **shift`、`unshift**:向数组开头添加或移除元素。 ### 15. Regular Expressions Perl拥有强大的正则表达式支持,可...

    perl-scripts实例.tar.gz

    - 变量:Perl支持多种类型的变量,如标量(scalar)、数组(array)和哈希(hash)。变量前缀$表示标量,@表示数组,%表示哈希。 - 引号:单引号(')内的字符串不进行特殊字符转义,双引号(")则会解析特殊字符,如`...

    arm-perl-5.20.1

    4. **数组和哈希的改变**:引入了新的数组和哈希操作,如`push`和`pop`对数组的惰性增长,以及哈希的`delete`操作的优化。 5. **模块和CPAN**:更新了核心模块,并对CPAN(Comprehensive Perl Archive Network)进行...

Global site tag (gtag.js) - Google Analytics