perl学习笔记——哈希
哈希
哈希是一种数据结构,它和数组的相似之处在于可以容难任意多的值并能按需取用,而他和数组的不同在于索引的方式,数组是以数字为索引而哈希则是以名字为索引。
哈希的键是唯一的,哈希的值可以重复。
哈希的应用场景
举例:
- 按名字找姓;
- 按主机名找IP地址或者按照IP地址找主机名;
- 按照单词统计其出现次数;
- 按用户名统计每个人使用的磁盘块数量;
- 按照驾照号码找出姓名。
访问哈希元素
如:$hash{$some_key} //注意使用的是大括号{} 不是中括号
赋值: $family_name{'fred'}='flintstone';
$family_name{'barney'}='rubble';
访问整个哈希
%some_hash=('foo',35,'bar',12.4); // %<哈希名>=(key,value,key,value......)
可以用下面代码简单查看:
my @k=keys %some_hash;//keys后面讲解
foreach (@k)
{
print "$_=>$some_hash{$_}"."\n";
}
注意输出顺序可能是乱序。
@tmp_hash=%some_hash==>结果:tmp=foo 35 bar 12.4
哈希赋值
my %new_hash=%old_hash;==>会为new_hash分配内存,然后将old_hash的值赋过去。并不是简简单单引用
my %inverse_hash=reverse %any_hash;

上面这个比较适用于:按主机名找IP地址或者按照IP地址找主机名
胖箭头=>
主要目的是为了对下面这种模式的改善:%some_hash=('foo',35,'bar',12.4);
如:my %some_hash=(
'foo'=>35,
'bar'=>12.4,
'dnio'=>undef,
);
注意:每一行的最后都有逗号.
哈希函数
keys values
keys函数能返回哈希的键列表,values函数能返回对应的值的列表。
如:my %hash=('a'=>1,'b'=>2,'c'=>3,);
my @k=keys %hash;// 将会得到 a b c
my @v=values %hash;// 将会得到 1 2 3
如果使用: my $count=keys %hash;//将会得到3 也就是说hash有3对键
each函数
如果需要迭代整个哈希,常见的用法就是用each函数.每次返回的就是hash表的键、值对。直到所有的元素都被访问完。
如:while (($k,$v)=each %hash){
print "$k=>$v\n";
}
再比如:each返回键-值对的顺序是乱序的,但它与keys和values返回的顺序相同,也就是hash的自然顺序。如果需要依次处理hash,则只需要对键排序就行
foreach $key(sort keys %hash){
$value=$hash{$key};
say "$key=>$value";
}
exists函数
检查哈希表中是否存在某个键。
if (exists $hash{'foo'}){
say "there is a foo";
}
delete函数
从哈希中删除指定的键和相对应的值。(总是成功)
my $person="betty";
delete $hash{$person};
%ENV哈希
Perl程序既然运行在某个环境中,就需要对周围的环境有所感知。Perl访问这些环境信息的方法就是访问%ENV哈希。如:
print "PATH is $ENV{PATH}";
perl学习笔记——哈希的更多相关文章
- Perl 学习笔记-哈希
1.Perl中的哈希 高效快捷, 没有大小限制. 大哈希一样很快! 命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间. $roger{"sex"} 和 $roger没 ...
- 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)
本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...
- Perl学习笔记(3)----遍历哈希表的一个容易疏忽的地方
今天做 Google的 Code Jam 上的一道题目:https://code.google.com/codejam/contest/351101/dashboard#s=p2,用Perl语言解答的 ...
- Perl 学习笔记-标量数据
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
- perl 学习笔记
一:基础 1:安装perl centos: yum -y install perl 官网:https://www.perl.org/ 升级到5.22:先下载,执行./i ...
- Perl 学习笔记-目标操作
1.在目录树中移动. 程序运行时会以当前工作目录作为相对路径的起点, 可以使用 chdir 操作符改变当前目录: chdir "/etc" or die "Can't ...
- Perl 学习笔记-高级控制结构
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码; unless(<condition>){code...;} 等价于 if(<con ...
- Perl 学习笔记-正则表达式处理文本
1.使用正则表达式替换文本 s/// s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...
- Perl 学习笔记-列表和数组
笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...
随机推荐
- 在什么情况下Java比C++快?
转载 http://www.importnew.com/16056.html
- MyEclipse10.7安装反编译插件
jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,下面像大家介绍下如何将jadclipse加入到MyEclipse10.X,9.X,8.X当中: htt ...
- Laravel查询技巧
1.同时增加几个字段的数量 DB::table('project') ->where('id',$yewuid) ->increment('count', 1, [ 'click'=> ...
- python formatters 与字符串 小结 (python 2)
最近学习python 2 ,觉得有必要小结一下关于字符串处理中的formatters, 转载请声明本文的引用出处:仰望大牛的小清新 0.%进行变量取值使用的时机 在python中,如果我们只是需要在字 ...
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- [Contest20180313]灵大会议
为了方便才用lct,没想到最后要加读入优化才能过... 有一个结论就是在一条链上,如果能找到一个点使得这个点划分链左右两边的树节点权值和最相近,那么这个点就是答案 用lct维护,每个splay节点存树 ...
- 【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1
观察一下,将整个过程写出来,会发现形成一棵满二叉树,每一层要么全是0,要么全是1. 输出的顺序是其中序遍历. 每一层的序号形成等差数列,就计算一下就可以出来每一层覆盖到的区间的左右端点. 复杂度O(l ...
- 【三维偏序】【分块】bzoj3262 陌上花开
裸的三维偏序. 对x坐标排序,y.z坐标分块.复杂度O(n*sqrt(n*log(n))).代码很短. #include<cstdio> #include<cmath> #in ...
- 【拓扑排序】【堆】CH Round #57 - Story of the OI Class 查错
拓扑排序,要让字典序最小,所以把栈改成堆. #include<cstdio> #include<queue> #include<algorithm> using n ...
- lua的luasocket程序
-- load namespace local socket = require("socket") -- create a TCP socket and bind it to t ...