加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl哈希表的存取和常用函数(转)

发布时间:2020-12-15 20:51:59 所属栏目:大数据 来源:网络整理
导读:Perl哈希表的存取和常用函数 http://developer.51cto.com ?2010-07-16 13:57 ?wunderup ?csdn.net ? 我要评论( 0 ) Perl哈希表是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,Perl哈希表的索引不是数字,而是名字
  • Perl哈希表的存取和常用函数

  • http://developer.51cto.com ?2010-07-16 13:57 ?wunderup ?csdn.net ?我要评论(0)
    Perl哈希表是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,Perl哈希表的索引不是数字,而是名字。

    ?

    本文和大家重点讨论一下Perl哈希表的概念,Perl哈希表是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。相信通过本文的介绍你一会让你有所收获。

    Perl基础 Perl哈希表?

    一、什么是Perl哈希表

    Perl哈希表是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,其索引不是数字,而是名字。也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串。

    key可以是任意的字符串,你可以使用任何的字符串作为key,但它们是唯一的。
    另一种思考hash的方法是,把它看作一堆数据(abarrelofdata),每一个数据都有一个相应的标签。可以通过标签访问此标签对应的元素。但其中是没有“第一个”元素的概念的。在数组中,数组元素从0,1,2开始编号。但在hash中,没有确定的顺序,因此也没有第一个元素。只是一些key/value对的集合。

    keys和values均为任意的标量,但keys通常转换为字符串。因此,如果将表达式50/20作为keys,则其通常被转换为3字符的字符串“2.5”。
    由于Perl的“没有不必要的限制”的设计哲学:hash可以是任意大小,从空hash(没有key/value对),到任何你内存允许的大小。
    keys是唯一的,但values可以重复。hash的value可以是数字,字符串,undef,或者它们的混合,但key是唯一的。
    为什么使用Hash
    可以把hash看作一个简单的数据库,其中每一个key下面可以有一块数据。如果你的任务是关于:“查询重复的”,“唯一的”,“交叉引用的”,“查询表”,则hash很可能在这类应用中帮上你的忙。

    二、Perl哈希表元素的存取

    要访问hash元素,可以使用下面的语法:$hash{$some_key}
    这和访问数组元素的方法有些类似,这里下标(key)上使用的是花括号({}),而不是方括号([])。现在key的表达式是字符串,而非数字。
    hash的名字和Perl中其它的标识符的命名规则是一样的(字母,数字,下划线组成,但不能由数字开头)。
    访问不存在的hash元素将得到undef。

    1.作为整体的hash

    要引用整个hash,使用百分号(%)作为前缀。
    为了方便,hash可以转换为列表,或者反过来。

    2.Hash赋值

    可以使用如下的语法在hash之间拷贝:
    %new_hash=%old_hash;
    将hash转变成其它形式更加常见。例如,我们可以将hash反转:
    %inverse_hash=reverse%any_hash;

    3.大箭头符号(=>)

    当给hash赋值时,有时并不明显哪些元素是keys,那些是values,因此发明了大箭头符号(=>)。在需要逗号的时候,都可以使用大箭头符号替换。
    如:
    ?

   
   
  1. my%last_name=( ?
  2. "www"=>1,?
  3. "eee"=>2,?
  4. ); ?

?

三、Perl哈希表函数

某些有用的函数可以对整个hash进行操作。

1.keys和values函数

keys函数会返回此hash的所有keys,values函数将返回所有的values。如果hash中没有元素,则此函数将返回空列表。
?

   
   
  1. my%hash=("a"=>1,"b"=>2,"c"=>3); ?
  2. printmy@k=keys%hash; ?
  3. printmy@v=values%hash; ?

2.each函数

如果想迭代hash的每一个元素,一种通常的方法是使用each函数,它将返回key/value对应的2个元素列表。
当对同一个hash函数进行一次迭代时,将返回下一个key/value对,直到所有的元素均被访问。如果没有更多的key/value对,则each函数将返回空表。
?

   
   
  1. my%hash=("a"=>1,"c"=>3); ?
  2. while(($key,$value)=each%hash) ?
  3. { ?
  4. print"$key=>$value/n"; ?
  5. } ?

当然,each返回的key/vlaue对,顺序是混乱的(它其顺序和keys和values函数返回的顺序相同)。如果想将其按序排放,可以对它们排序(使用sort)。
?

   
   
  1. my%hash=("a"=>1,"c"=>3,"d"=>4); ?
  2. foreach$key(sortkeys%hash) ?
  3. { ?
  4. $value=$hash{$key}; ?
  5. print"$key=>$value/n"; ?
  6. } ?

四、Perl哈希表的通常用法

1.exists函数

要查看hash中是否存在某个key,可以使用exists函数,如果hash中存在此key,则返回true,与是否有对应的value无关。
?

   
   
  1. my%hash=("a"=>1,"d"=>4); ?
  2. if(exists$hash{'a'}) ?
  3. { ?
  4. print"true"; ?
  5. } ?

2.delete函数

delete函数将某个给定的key(包括其对应的value)从hash中删除。如果不存在这个key,则什么也不做,不会有警告或者错误信息。
?

   
   
  1. my%hash=("a"=>1,"d"=>4); ?
  2. delete$hash{'a'}; ?
  3. foreach$key(sortkeys%hash) ?
  4. { ?
  5. $value=$hash{$key}; ?
  6. print"$key=>$value/n"; ?
  7. } ?

3.hash元素的内插

你可以在双引号的字符串中使用单个hash元素,但不支持整个hash的内插。
?

   
   
  1. my%hash=("a"=>1,"d"=>4); ?
  2. foreach$key(sortkeys%hash) ?
  3. { ?
  4. print"$key=>$hash{$key}/n"; ?
  5. } ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读