zoukankan      html  css  js  c++  java
  • hash 在 perl 中的用法(转载)

    Perl的数据结构中最有趣的一个特性是哈希(hash),它使得在数据片段之间建立键-值(key-value)关联成为可能。虽然这些哈希要远远比普通系统中以数字索引的数组用途更广,但是往往也会使初学者不知所措。这就是要写本篇文章的原因所在??它将告诉你如何创建Perl的哈希,如何插入、删除要素,以及如何创建嵌套哈希和利用循环来处理哈希。


    1)定义哈希
    首先,什么是哈希?

    从本质上来说,它是以字符串索引的数组。也就是说,你要使用字符串标签而不用数字来存取各个元素。下面是一个例子:
    列表 A
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’ => ’apple’,
    ’b’ => ’ball’,
    ’c’ => ’cat’,
    ’x’ => ’xylophone’);
    上面的几行用四对 键-值 关联建立了一组Perl 哈希。可以注意到,变量名前面的符号%表示它是一个哈希,箭头用来指出 键?值关系。
    你也可以这样写代码:
    列表 B
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    在定义了一个哈希以后,你就可以用定义后的名称对独立的要素进行存取。例如,看下面的代码:
    列表 C
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    # access hash value
    print "A is for " . $alphabet;
    输出结果为:
    A is for apple.

    要清除哈希,只需简单地把它赋值于一个空的数据集,就像下面的例子:
    列表 D
    #!/usr/bin/perl
    # (re)initialize hash
    %alphabet = ();

    2)插入、改变和删除哈希元素
    你可以在一个哈希中插入一个新元素(或者更改一个现有的哈希),只需要给与之相对应的键设置一个新的数值就行了。如果这个键不存在,它将会被创建。下面是一个例子:
    列表 E
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    # add new element
    $alphabet = ’dog’;
    # change existing element
    $alphabet = ’arrow’;
    # access hash value
    print "A is for " . $alphabet;
    你可以用delete()函数删除一对键?值对,就像下面这样:
    列表 F
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    # delete element
    delete $alphabet;

    3)检索键和数值
    如果你觉得一个哈希的键和数值有用,需要进一步处理,Perl允许将其提取到单独的数据结构中。你可以用函数keys()将一个哈希的键返回成为一个数字索引的数组。下面是一个例子:
    列表 G
    #!/bin/perl
    # define hash
    %alphabet = (’a’ => ’apple’, ’b’ => ’bat’, ’c’ => ’cat’);
    # get and print hash keys
    @keys = keys(%alphabet);
    print "@keys ";
    或者,你可以用函数values()获得一个具有哈希值的数组,如下:
    列表H
    #!/bin/perl
    # define hash
    %alphabet = (’a’ => ’apple’, ’b’ => ’bat’, ’c’ => ’cat’);
    # get and print hash values
    @vals = values(%alphabet);
    print "@v ";

    4)计算哈希的大小
    计算哈希大小的最简单方法就是用上述的keys()函数,将哈希中的键提取到一个数组中,然后检索得到数组的大小,操作方法如下:
    列表 I
    #!/bin/perl
    # define hash
    %alphabet = (’a’ => ’apple’, ’b’ => ’bat’, ’c’ => ’cat’);
    # print number of hash elements
    print "The hash has " . scalar(keys(%alphabet)) . " elements ";

    5)处理哈希元素
    运用while()循环处理一个哈希中的所有元素也比较容易。下面是一个简单的例子:
    列表 J
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    # loop over hash
    while (($key, $value) = each(%alphabet) ) {
    print "$key is for $value ";
    }
    或者,用前面已经讨论过的for()循环和keys()函数:
    列表 K
    #!/usr/bin/perl
    # define hash
    %alphabet = (’a’, ’apple’, ’b’, ’ball’, ’c’, ’cat’, ’x’, ’xylophone’);
    # loop over hash
    for $k (keys(%alphabet)) {
    print $k . " is for " . $hash . " ";
    }

    6)运用嵌套的哈希
    Perl 也允许在一个哈希(或数组)中再嵌入一个哈希(或数组)。这样就为构建长而复杂的数据结构提供了很大的灵活性,下面是一个例子:
    列表 L
    #!/usr/bin/perl
    %movies = (
    ’black’ => {’hero’ => ’Batman’, ’villain’ => ’The Penguin’},
    ’red’ => [{’hero’ => ’Spiderman’, ’villain’ => ’Green Goblin’},
    {’hero’ => ’Superman’, ’villain’ => ’LexLuthor’}]
    );
    # retrieve and print values
    print $movies . " fights " . $movies . " ";
    print $movies[1] . " fights " . $movies[1] . " ";
    该代码返回的结果是:
    Batman fights The Penguin
    Superman fights LexLuthor

  • 相关阅读:
    QT *.pri 语法学习
    qt 的相对路径说法
    openwrt 时间更新
    openwrt network 初始化
    在线配置热加载配置 go-kratos.dev 监听key 通过atomic.Value支持自动热加载
    Monkey patching
    UDP flood UDP Port Denial-of-Service Attack
    一例 Go 编译器代码优化 bug 定位和修复解析
    t
    golang 网络编程之如何正确关闭tcp连接以及管理它的生命周期 socket
  • 原文地址:https://www.cnblogs.com/lize19940412/p/6636837.html
Copyright © 2011-2022 走看看