`
weihe6666
  • 浏览: 436216 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
    
哈希
        

2.1 什么是哈希

哈希是一种数据结构,以数字、字符串等为索引将值存放到其中,或者从中取回值。哈希把任意长度的输入(键),通过散列算法,变换成固定长度的散列值输出,将输入视为索引,将输出视为给索引分配的唯一内存地址,地址里存放的是这个索引代表的内容。

2.2.1 访问语法  

2.2.1.1    读取哈希(hash) 元素
语法如下:

$hash变量名{哈希健}

如:

$studentage=$age{张三};

2.2.1.2    修改或增加哈希(hash)元素

语法如下:

$hash变量名{哈希健}=健值。

如:

$age{张三}=28;

2.2.1.3    访问不存在的hash健值

不存在的hash健值的访问结果是undef,undef即未定义。

2.2.2 哈希变量声明

对于使用了use strict语句的程序,必须事先声明变量,语法如下:
变量范围 %哈希变量名

如:

my  %studentage;

2.2.3 哈希拷贝与反转

哈希之间的拷贝语法如下:
%新变量名 = %被拷贝的变量名;

如:

%newstudentage=%studentage;

哈希反转语法如下:

%newstudentage=reverse %studentage;

哈希的反转指哈希键和哈希值调换,例如:

my %student;

my %newstudent;

%student=("张三"=>"上海","李四"=>"广州","王五"=>"北京");

print  "$student{'张三'}\n";

%newstudent=reverse  %student;

print  "$newstudent{'上海'}\n";

输出如下:

上海

张三

上述代码中,未反转之前,张三为键,上海为值,反转后,上海为键,张三为值。

2.2.4  哈希赋值

使用大箭头符号(=>)对HASH赋值,箭头左边是健,右边是值。

语法如下:

my  %变量名=(

健名1=>健值1,

健名2=>健值2,

………..

……….

健名n=>健值n

)

如:

#perl3-1.pl

use strict;

use warnings;

#哈希赋值

my %studentage;

%studentage=(

"张三"=>19,

"李四"=>22

);

#访问哈希

print "张三:$studentage{'张三'}";

print "\n";

3.内插哈希

很多情况下,需要几层哈希来存储一个数据表,比如以下学生成绩表:
姓名 物理化学数学
张三 85 79  90
李四 77 96  79
王五 86 91  93


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

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

#第1层哈希

my %student;

#第2层哈希

%student=(

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

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

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

);


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

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

   上述代码还可写成:


#第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

分享到:
评论

相关推荐

    Centos7 离线perl-CPAN rpm包

    3. **perl-Digest-SHA-5.85-4.el7.x86_64.rpm**: 这是Perl的Digest::SHA模块,提供了SHA(Secure Hash Algorithm)哈希函数的实现,包括SHA-1和SHA-2系列。这些哈希函数在数据完整性检查、密码存储和文件校验等方面...

    perl-5.32.1.tar.gz

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

    perl-Hash-DefHash

    "perl-Hash-DefHash"项目是Perl社区中的一个模块,它扩展了Perl内置的数据结构——哈希(Hash),提供了一种定义默认值的方法。哈希在Perl中扮演着至关重要的角色,它们是关联数组,允许通过键来存储和检索值。 在...

    ActivePerl-5.8.6.811-MSWin32-x86-122208

    Perl 5.8是Perl的一个重要版本,引入了许多新特性,比如增强了正则表达式、改进了Unicode支持、引入了新的数据类型(例如array slice和hash slice)以及改进了模块安装系统CPAN(Comprehensive Perl Archive Network...

    perl-DBI-1.40-5.i386.rar

    4. **数据处理**:DBI提供了一系列的函数用于处理查询结果,如fetchrow_array、fetchrow_hashref等,便于将结果集转化为数组或哈希。 5. **事务管理**:支持开始、提交、回滚事务,确保数据的一致性和完整性。 6. ...

    perl-centos6.rar

    在使用Perl编程时,还需要了解一些基础概念,如变量(scalar、list和hash)、控制结构(if、unless、for、while等)、函数、模块(CPAN,Comprehensive Perl Archive Network,提供大量的第三方模块)以及Perl的正则...

    perl-scripts实例.tar.gz

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

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

    - **哈希表表示**:使用 `%` 前缀表示哈希变量,例如 `%hash`。 ### 变量表示详解 - **数组 (@)**:数组是Perl中的一种数据结构,用于存储多个有序的元素。可以通过索引来访问数组中的特定元素,索引从0开始。...

    Note of Learning Perl--Hashes

    哈希(Hash)是Perl中一种极其重要的数据结构,它允许我们以键值对的形式存储数据,便于快速查找和操作。本文将深入探讨Perl中的哈希,包括其基本概念、操作方法以及实际应用。 一、哈希的基本概念 哈希在Perl中被...

    perl-pocket-ref-5.004.1.pdf

    Array and Hash Functions Perl内置了一些用于操作数组和哈希的函数。 - **push`、`pop**:向数组添加或移除元素。 - **shift`、`unshift**:向数组开头添加或移除元素。 ### 15. Regular Expressions Perl拥有...

    Perl-by-Example.rar_Perl_Perl by Example_beginners_perl example

    my %hash = (key1 => "value1", key2 => "value2"); ``` **正则表达式** Perl内置了对正则表达式的强大支持,这使得它在文本处理方面非常高效。例如,以下代码将检查一个字符串是否包含"example": ```perl if ($...

    perl文件用法

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务方面表现突出。要了解如何使用Perl以及它的基本用法,我们首先需要安装Perl解释器,通常可以在官方网站`www.perl.org`上找到对应操作系统的版本。安装...

    perl-examples_beginners_Perl_

    2. **变量**:Perl中的变量以符号`$`开头,如`$var`,对于数组则使用`@array`,哈希(关联数组)使用`%hash`。`ex02.pl`和`ex03.pl`可能涉及到变量的声明和使用,包括变量赋值、类型转换以及变量作用域的概念。 3. ...

    mongo-perl-bson-xs:BSON规范的Perl XS实现-http:bsonspec.org

    my $bson_bytes = BSON::XS::encode_bson($perl_hash); my $decoded_hash = BSON::XS::decode_bson($bson_bytes); print Dumper($decoded_hash); # 输出原始的 Perl 哈希 ``` 在实际项目中,`mongo-perl-bson-xs` ...

    perl_hash 函数

    ### Perl Hash 数据结构详解 #### 一、Perl Hash 概述 **Perl Hash** 是 Perl 编程语言中的一种非常重要的数据结构。它类似于数组,但与数组不同之处在于其索引(通常称为 key)不是数字,而是字符串。这意味着...

    [应用开发及迁移][客户端编程接口]Perl-DBI指南.pdf

    ### [应用开发及迁移][客户端编程接口]Perl-DBI指南 #### 第 1 章 概述 **KingbaseES database driver for the DBI module** 的设计初衷是为了提供一个便于用户通过Perl语言访问KingbaseES数据库的接口。这不仅...

Global site tag (gtag.js) - Google Analytics