Perl
+ -

Perl 哈希

2019-09-09 6 0

哈希是 key/value 对的集合。

Perl中哈希变量以百分号 (%) 标记开始。

访问哈希元素格式: ${key}

以下是一个简单的哈希实例:

实例

#!/usr/bin/perl
%data = ('google', 'google.com', 'bytekits', 'http://www.bytekits.com', 'taobao', 'taobao.com');
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'bytekits'} = $data{'bytekits'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";

执行以上程序,输出结果为:

$data{'google'} = google.com
$data{'bytekits'} = http://www.bytekits.com
$data{'taobao'} = taobao.com

创建哈希

创建哈希可以通过以下两种方式:

一、为每个 key 设置 value

$data{'google'} = 'google.com';
$data{'bytekits'} = 'http://www.bytekits.com';
$data{'taobao'} = 'taobao.com';

二、通过列表设置

列表中第一个元素为 key,第二个为 value。

%data = ('google', 'google.com', 'bytekits', 'http://www.bytekits.com', 'taobao', 'taobao.com');

也可以使用 = > 符号来设置 key/value:

%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');

以下实例是上面实例的变种,使用 - 来代替引号:

%data = (-google=>'google.com', -bytekits=>'http://www.bytekits.com', -taobao=>'taobao.com');

使用这种方式 key 不能出现空格,读取元素方式为:

$val = $data{-google}
$val = $data{-bytekits}

访问哈希元素

访问哈希元素格式: ${key} ,实例如下:

实例

#!/usr/bin/perl
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'bytekits'} = $data{'bytekits'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";

执行以上程序,输出结果为:


读取哈希值

你可以像数组一样从哈希中提取值。

哈希值提取到数组语法格式: @{key1,key2}

实例

#!/uer/bin/perl
%data = (-taobao => 45, -google => 30, -bytekits => 40);
@array = @data{-taobao, -bytekits};
print "Array : @array\n";

执行以上程序,输出结果为:

Array : 45 40

读取哈希的 key 和 value

读取所有key

我们可以使用 keys 函数读取哈希所有的键,语法格式如下:

keys %HASH

该函数返回所有哈希的所有 key 的数组。

实例

#!/usr/bin/perl 
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
@names = keys %data;
print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

执行以上程序,输出结果为:

taobao
google
bytekits

类似的我们可以使用 values 函数来读取哈希所有的值,语法格式如下:

values %HASH

该函数返回所有哈希的所有 value 的数组。

实例

#!/usr/bin/perl 
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
@urls = values %data;
print "$urls[0]\n";
print "$urls[1]\n";
print "$urls[2]\n";

执行以上程序,输出结果为:

taobao.com
http://www.bytekits.com
google.com

检测元素是否存在

如果你在哈希中读取不存在的 key/value 对 ,会返回 undefined 值,且在执行时会有警告提醒。

为了避免这种情况,我们可以使用 exists 函数来判断key是否存在,存在的时候读取:

实例

#!/usr/bin/perl
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
if( exists($data{'facebook'} ) ){
   print "facebook 的网址为 $data{'facebook'} \n";
}
else
{
   print "facebook 键不存在\n";
}

执行以上程序,输出结果为:

facebook 键不存在

以上代码中我们使用了 IF…ELSE 语句,在后面的章节我们会具体介绍。


获取哈希大小

哈希大小为元素的个数,我们可以通过先获取 key 或 value 的所有元素数组,再计算数组元素多少来获取哈希的大小,实例如下:

实例

#!/usr/bin/perl
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
@values = values %data;
$size = @values;
print "2 - 哈希大小: $size\n";

执行以上程序,输出结果为:

1 - 哈希大小: 3
2 - 哈希大小: 3

哈希中添加或删除元素

添加 key/value 对可以通过简单的赋值来完成。但是删除哈希元素你需要使用 delete 函数:

实例

#!/usr/bin/perl
%data = ('google'=>'google.com', 'bytekits'=>'http://www.bytekits.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
# 添加元素
$data{'facebook'} = 'facebook.com';
@keys = keys %data;
$size = @keys;
print "2 - 哈希大小: $size\n";
# 删除哈希中的元素
delete $data{'taobao'};
@keys = keys %data;
$size = @keys;
print "3 - 哈希大小: $size\n";

执行以上程序,输出结果为:

1 - 哈希大小: 3
2 - 哈希大小: 4
3 - 哈希大小: 3

0 篇笔记 写笔记

Redis INCR key
Redis INCR 命令用于将键(key)的整数值加1,如果键(key)不存在,则在执行操作之前将其设置为0,如果键包含错误类型的值或包含不能表示为整数的字符串,则返回错误,此操作仅限于64位带符号整数。INCR - 返回值整数回复,递增后的键值。INCR - 语法以下是Redis INCR 命令......
C# 索引器(Indexer)
索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚 拟数组(virtualarray) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。语法一维索引器的语法如下:element-type this[int index] { /......
Perl 引用
引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。创建引用定义变量的时候,在变量名前面加个,就得到了这个变量的一个引用,比如:$scalarref = $foo; # 标量变量引用$arrayref = @ARG......
Redis HGETALL key
Redis HGETALL 命令用于获取存储在键(key)处的所有字段和值。HGETALL - 返回值返回存储在哈希中的字段及其值的列表,或者当键不存在时为空列表。HGETALL - 语法以下是Redis HGETALL 命令的基本语法。redis 127.0.0.1:6379> HGETAL......
Redis SETRANGE key offset value
Redis SETRANGE 命令用于覆盖从指定偏移量开始的键处的字符串的一部分。SETRANGE - 返回值整数回复,由命令修改后的字符串长度。SETRANGE - 语法以下是Redis SETRANGE 命令的基本语法。redis 127.0.0.1:6379> SETRANGE KEY_......
Perl POD 文档
Perl 中可以在模块或脚本中嵌入 POD(Plain Old Documentation) 文档。POD 是一种简单而易用的标记型语言(置标语言)。POD 文档使用规则:POD 文档以 =head1 开始, =cut 结束, =head1 前与 =cut 后添加一空行。Perl 会忽略 POD 中......
Ruby 方法
Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。语法def metho......
Perl 面向对象
Perl 中有两种不同地面向对象编程的实现:一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用。在这个匿名哈希表中,存储来所有的实例属性。二是基于数组的方式,在定义一个类的时候,我们将为每一个实例属性创建一个数组,而每一个对象实例的实质就是一个指向这些数组中某一行索引的引用。在......
Python3 运算符
本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中, 4 和 5 被称为 操 作数,”+ “ 称为运算符。Python语言支持以下类型的运算符:算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级接下来让我们一个个来学习Python的......
Java rint() 方法
rint() 方法返回最接近参数的整数值。语法该方法有以下几种语法格式:double rint(double d)参数double 原始数据类型。返回值返回 double 类型数组,是最接近参数的整数值。实例实例public class Test{ public static void mai......
Redis RANDOM key
Redis RANDOMKEY 命令用于从Redis数据库获取随机键(key)。RANDOMKEY - 返回值字符串,一个随机键,如果数据库为空,则为nil。RANDOMKEY - 语法以下是Redis RANDOMKEY 命令的基本语法。redis 127.0.0.1:6379> RANDO......
MySQL PHP语法
MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,Mysql在PHP的web开发中是应用最广泛。在本教程中我们大部分实例都采用了 PHP 语言。如果你想了解 Mysql 在 PHP 中的应用,可以访问我们的 PHP教程。PHP提供了多种方式来访问和......
Ruby CGI方法
以下为CGI类的方法列表:序号方法描述 1CGI::new([ level=”query”]) 创建 CGI 对象。query可以是以下值: query: 没有 HTML 生成输出 html3: HTML3.2 html4: HTML4.0 Strict html4Tr: HTM......
Redis PERSIST Key
Redis PERSIST 命令用于从键(key)中删除到期时间。PERSIST - 返回值整数值1或01,如果从键(key)中删除了超时。0,如果键(key)不存在或没有关联的超时。PERSIST - 语法以下是Redis PERSIST 命令的基本语法。redis 127.0.0.1:6379&......
Ruby 变量
/ruby/ruby-variable.html变量是持有可被任何程序使用的任何数据的存储位置。Ruby 支持五种类型的变量。一般小写字母、下划线开头:变量(Variable)。$ 开头:全局变量(Global variable)。@ 开头:实例变量(Instance variable)。@@ 开头......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!