zoukankan      html  css  js  c++  java
  • 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{$_}"." ";

    }

    注意输出顺序可能是乱序。

    @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 ";

    }

    再比如: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}";

  • 相关阅读:
    计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
    HDU 1248 寒冰王座(全然背包:入门题)
    android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
    Oracle varchar 字段排序问题
    Response.AddHeader使用实例
    Unity 3D 文件导入出错
    Sencha app build 出现 missing name after . operator 问题
    TFS(Team Foundation Server)介绍和入门
    较具体的介绍JNI
    Struts2学习笔记1
  • 原文地址:https://www.cnblogs.com/lukexwang/p/4667961.html
Copyright © 2011-2022 走看看