现在的位置: 首页 > 综合 > 正文

Perl 二维数组教程

2018年08月05日 ⁄ 综合 ⁄ 共 1475字 ⁄ 字号 评论关闭

 

Perl 二维数组教程

【Perl 文档中文化计划】Perl 二维数组教程翻译完成。

[code]NAME
    perllol - 操作数组的数组(二维数组)

说明
  声明和访问数组的数组
    创建一个数组的数组(有时也可以叫“列表的列表”,不过不太准确)真是再简
    单也不过了。它相当容易理解,并且本文中出现的每个例子都有可能在实际应用
    中出现。

    数组的数组就是一个普通的数组(@AoA),不过可以接受两个下标("$AoA[3][2])。
    下面先定义一个这样的数组: "

        # 一个包含有“指向数组的引用”的数组
        @AoA = (
            [ "fred", "barney" ],
            [ "george", "jane", "elroy" ],
            [ "homer", "marge", "bart" ],
        );

        print $AoA[2][2];
      bart

    你可能已经注意到,外面的括号是圆括号,这是因为我们想要给数组赋值,所以
    需要圆括号。如果你*不*希望这里是 @AoA,而是一个指向它的引用,那么就得
    这样:

        # 一个指向“包含有数组引用的数组”的引用
        $ref_to_AoA = [
            [ "fred", "barney", "pebbles", "bambam", "dino", ],
            [ "homer", "bart", "marge", "maggie", ],
            [ "george", "jane", "elroy", "judy", ],
        ];

        print $ref_to_AoA->[2][2];

    注意外面的括号现在变成了方括号,并且我们的访问语法也有所改变。这时因为
    和 C 不同,在 Perl 中你不能自由地交换数组和引用(在 C 中,数组和指针在
    很多地方可以互相代替使用)。$ref_to_AoA 是一个数组引用,而 @AoA 是一个
    数组。同样地,$AoA[2] 也不是一个数组,而是一个数组引用。所以下面这
    两行:

        $AoA[2][2]
        $ref_to_AoA->[2][2]

    也可以用这两行来代替:

        $AoA[2]->[2]
        $ref_to_AoA->[2]->[2]

    这是因为这里有两个相邻的括号(不管是方括号还是花括号),所以你可以随意
    地省略箭头符号。但是如果 $ref_to_AoA 后面的那个箭头不能省略,因为省略
    了就没法知道 $ref_to_AoA 到底是引用还是数组了 ^_^。

  修改二维数组
    前面的例子里我们创建了包含有固定数据的)二维数组,但是如何往其中添加新元
    素呢?再或者如何从零开始创建一个二维数组呢?

    首先,让我们试着从一个文件中读取二维数组。首先我们演示如何一次性添加一
    行。首先我们假设有这样一个文本文件:每一行代表了二维数组的行,而每一个
    单词代表了二维数组的一个元素。下面的代码可以把它们储存到 @AoA:

        while (<>) {
            @tmp = split;
            push @AoA, [ @tmp ];
        }

    你也可以用一个函数来一次读取一行:

        for $i ( 1 .. 10 ) {
            $AoA[$i] = [ somefunc($i) ];
        }

    或者也可以用一个临时变量来中转一下,这样看起来更清楚些:

        for $i ( 1 .. 10 ) {
            @tmp = somefunc($i);
            

抱歉!评论已关闭.