哈希

哈希是一种数据结构,它和数组的相似之处在于可以容难任意多的值并能按需取用,而他和数组的不同在于索引的方式,数组是以数字为索引而哈希则是以名字为索引。

哈希的键是唯一的,哈希的值可以重复。

哈希的应用场景

举例:

  • 按名字找姓;
  • 按主机名找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学习笔记——哈希的更多相关文章

  1. Perl 学习笔记-哈希

    1.Perl中的哈希 高效快捷, 没有大小限制. 大哈希一样很快! 命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间.  $roger{"sex"} 和 $roger没 ...

  2. 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)

    本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...

  3. Perl学习笔记(3)----遍历哈希表的一个容易疏忽的地方

    今天做 Google的 Code Jam 上的一道题目:https://code.google.com/codejam/contest/351101/dashboard#s=p2,用Perl语言解答的 ...

  4. Perl 学习笔记-标量数据

    最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...

  5. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  6. Perl 学习笔记-目标操作

    1.在目录树中移动. 程序运行时会以当前工作目录作为相对路径的起点, 可以使用  chdir 操作符改变当前目录: chdir "/etc" or die "Can't ...

  7. Perl 学习笔记-高级控制结构

    1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码;  unless(<condition>){code...;} 等价于  if(<con ...

  8. Perl 学习笔记-正则表达式处理文本

    1.使用正则表达式替换文本  s///  s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...

  9. Perl 学习笔记-列表和数组

    笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...

随机推荐

  1. ECharts问题--柱状图和折线图中xAxis.data为空时报错问题解决

    1. 我们在日常的开发中使用Echarts时,不像在学习的过程中是自己在option中的配置项填写图表需要的参数,而是通过ajax请求后台,获取数据后,使用javascript来动态的修改数据,但是有 ...

  2. Linq 联合条件查询快捷方法

    原方法: public ProductDC[] GetProductQueryCondition(ProductQueryConditionDC filter){//红色为原来的联合条件(之后下面的修 ...

  3. BZOJ 1800

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1622  Solved: 1293[Submit][St ...

  4. Idea设置全白色 背景

    IDEA设置全白色背景 标签(空格分隔): 工具使用 编辑框白色设置 菜单栏白色设置

  5. win32 sdk列表视图控件(ListCtrl或ListView)资料整理

    列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来.与树视图类似,列表控件可以由多个子项目组成,可以设置为Icon ...

  6. Appium+python自动化28-name定位【转载】

    本篇转自博客:上海-悠悠 前言 appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了 一. name定位报错 1.最新版appium V1.7用name定位 ...

  7. springboot 通用Mapper使用

    https://blog.csdn.net/dwf_android/article/details/79359360 https://www.cnblogs.com/larryzeal/p/58741 ...

  8. 服务端指南 数据存储篇 | 聊聊 Redis 使用场景(转)

    作者:梁桂钊 本文,是升级版,补充部分实战案例.梳理几个场景下利用 Redis 的特性可以大大提高效率. 随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求.因此,Redis 基于内存存 ...

  9. linux下redis的最佳实践(Master-Slave)

    本文演示了redis在同一台linux上的安装及运行多个实例,并演示了主从复制,以及如何进行主从的切换. 1. 下载 $ wget http://download.redis.io/releases/ ...

  10. linux程序与进程内存结构

    1.可执行文件结构: 1)代码区:包含操作码和操作对象.常量数据(const声明).立即数,代码区是共享的, 只提供只读. 2)全局/静态数据区:包含被初始化的全局数据和初始化静态数据. 3)未初始化 ...