1 数组与引用
此处引用相当于C中的指针。
二维数组第一列不存储具体元素而是存储指向该行一维数组的引用。
2 声明的区别
- 数组用如下形式声明:
数组名前加@,之后用()。
my @AoA = ( [ "fred", "barney", "pebbles", "bambam", "dino", ], [ "george", "jane", "elroy", "judy", ], [ "homer", "bart", "marge", "maggie", ], );
- 引用如下形式声明:
引用名前用$,之后用[]。
$ref_to_AoA = [ [ "fred", "barney", "pebbles", "bambam", "dino", ], [ "george", "jane", "elroy", "judy", ], [ "homer", "bart", "marge", "maggie", ], ];
3 访问的区别
- 数组访问
$AoA[$i][$j]
因为第一列数组里面存放的是引用,所以还可以这样访问:
$AoA[$i]->[$j]
- 引用访问
$ref_AoA->[$i][$j]
同理引用还可以这样访问:
$ref_AoA->[$i]->[$j]
4 添加行元素
my (@AoA, $ref_to_AoA); sub print_AoA{ for (@AoA) { print "@{$_}\n"; } print "\n"; } # assign to our array, an array of array references @AoA = ( [ "fred", "barney", "pebbles", "bambam", "dino", ], [ "george", "jane", "elroy", "judy", ], [ "homer", "bart", "marge", "maggie", ], ); say $AoA[2][1]; $ref_to_AoA = [ [ "fred", "barney", "pebbles", "bambam", "dino", ], [ "george", "jane", "elroy", "judy", ], [ "homer", "bart", "marge", "maggie", ], ]; print_AoA(); my @tmp = (1, 2, 3, 4); push @AoA, [@tmp]; # 因为数组AoA第一列需要的是引用,而@tmp是数组,直接赋值会出错。[]表示返回@tmp的引用,即把@tmp的引用push到@AoA最后一行,二维数组行数加1. print_AoA(); push @AoA, @tmp; print_AoA();
覆盖行
#$AoA[0] = @tmp; #$AoA[0]是scalar型,而@tmp是list型,所以用默认把tmp的个数赋给$AoA[0],即$AoA[0]=4; $AoA[0] = [@tmp]; #overwirte print_AoA();
5 添加列元素
push @{$AoA[0]}, "wilma", "betty";
省略@{}
use v5.14; # needed for implicit deref of array refs by array ops push $AoA[0], "wilma", "betty"; # 在5.14版本之前不能通过,因为以前规定push的第一参数必须为数组。在新版本中当$AoA[0]中存在引用时可以通过,但无引用时不正确。 print_AoA(); my $aref = undef; #push $aref, qw/some value/; # 出错:Not an ARRAY reference my $aref = [@tmp]; push $aref, qw/some value/; # 正确,因为aref此时不是个空引用 print "$aref : @$aref\n";
6 访问与打印
6.1 运算符优先级
$@*%&
6.2 访问一个
print $AoA[$i][$j]; print ref_$AoA->[$i]->[$j];
6.3 遍历
- 最简单的一种
for $aref ( @AoA ) # $aref只是第一列里面的引用,要想访问整行必须加@,又$访问级别比@高,所以()可以省略。 { say "\t [ @$aref ],"; }
- 使用$#
for my $i (0 .. $#AoA){ say "elt $i is @{$AoA[$i]}"; }
- 内嵌循环
for my $i (0 .. $#AoA){ for my $j (0 .. $#{$AoA[$i]}){ say "elt $i, $j is $AoA[$i][$j]\n"; } }
7 切片
要访问几行几列元素。和Matlab中访问矩阵的方法差不多。
- 切单行多列
my @part = (); my $x = 4; for (my $y = 1; $y<4; $y++){ push @part, $AoA[$x][$y]; } # 简单写法 @part = @{$AoA[4]}[1..4];
- 切多行多列
my @newAoA = (); for (my $startx= my $i = 1; $i<=5; $i++){ for(my $starty = my $j = 2; $j<=4; $j++){ $newAoA[$i - $startx][$j - $starty] = $AoA[$i][$j]; } } #一个循环简单写法 for (my $x = 1; $x<=5; $x++){ push @newAoA, [@{$AoA[i]}[2 .. 4]]; }
- 编写函数
sub splice_2D{ my $lrr = shift; my($x_l, $x_h, $y_l, $y_h) = @_; return map( [ @{$lrr -> [$_]} {$y_l .. $y_h}] )$x_l .. $x_h; } @newAoA = splice_2D(\@AoA, 1=>5, 2=>4);
Date: 2011-10-29 15:00:34
HTML generated by org-mode 6.33x in emacs 23
相关推荐
标题中的“2dloop2darray_pl_depCheck.7z”暗示了这是一个关于二维循环、二维数组以及在Perl编程语言中进行依赖性检查的压缩文件。在这个文件中,可能包含了一个或多个源代码文件,用于演示如何在Perl中处理二维数组...
标题“2dloop2darray_pl_functionAccess.7z”暗示了这个压缩包可能包含一个或多个文件,涉及二维数组(2D array)在Perl语言中的操作,特别是关于循环(loop)和函数访问(function access)相关的编程内容。在Perl...
Perl中的二维哈希,也称为关联数组的嵌套,是一种数据结构,允许你在一个哈希中存储另一个哈希。这使得处理多级或复杂的数据结构成为可能,特别适合于需要组织多个相关数据集的情况。在Perl中,哈希通常用百分号 `%`...
标题中的“2dloop2darray_pl”暗示了我们即将探讨的是二维循环和二维数组在编程语言中的应用,特别是与Perl语言相关的内容。在Perl中,二维数组是一种强大的数据结构,用于存储多列或多行的数据。它是由一维数组构成...
标题中的“2dloop2darray_pl_apint.7z”可能是指一个关于二维循环、二维数组以及在Perl编程语言中使用整数(apint)的压缩文件。由于标签为空,我们无法直接获取额外的上下文信息,但我们可以根据文件名推测其内容。...
标题“2dloop2darray_pl_subf.7z”暗示了这个压缩包可能包含一个或多个文件,涉及二维数组、循环以及可能是Perl语言的子函数。从描述中我们无法获取更多具体信息,因为“2dloop2darray_pl_subf.7z”只是文件名,不...
在Perl中,数组的数组是最常见的数据结构之一,常被称为二维数组或矩阵。这种数据结构通过将多个数组对象存储在一个数组中来实现。 ##### 1. 创建与访问 创建一个二维数组的基本方式是先定义一个数组,然后将其...
在这个实验中,通过“二维数组快速排序.vi”,你可以学习如何在LabVIEW中设计交互式界面,如何处理2D数组,以及如何实现快速排序算法。同时,也可以了解到LabVIEW中的数据操作和控制流程,这对于提高LabVIEW编程技能...
矩阵通常是以二维数组的形式存储,每行和每列都代表一个氨基酸。Perl的`<DATA>`文件句柄或者`open`函数可以用来读取包含矩阵数据的文本文件。接着,代码会将这些数据解析成适当的数组结构,以便于在比对时快速查找...
输出结果是"Search1:1"表示找到了"PHP"在第二个位置(注意数组的索引是从0开始的),"Search2:0"表示"Perl"在数组的第一个位置,而"Search3:"后面没有值因为"C#"不在数组中。 接着,我们来看看`in_array`函数。`in_...
在Perl中,我们可以使用二维数组来存储方块的位置和形状。每个单元格可以被赋值为0(空)或非零(代表不同形状的方块)。同时,我们需要定义一系列预设的方块形状,并在游戏开始时随机选择一个作为初始方块。 用户...
- `fetchall_hashref_arrayref()`:获取所有查询结果作为包含哈希引用的二维数组引用。 - `commit()`:提交当前事务。 - `rollback()`:回滚当前事务。 5. 其他特性: - 错误处理:通过`err`, `errstr`, 和 `...
例如,我们可以创建一个二维数组,其中每个元素都是一个`uint16_t`,代表UTF-16编码的汉字: ```c const uint16_t file_data[] = {0x4E2D, 0x6587, ...}; // 假设'汉'的UTF-16编码是0x4E2D, '字'是0x6587 ``` 数组...
4. 引用和数据结构:Perl有独特的引用机制,允许创建复杂的数据结构,如数组和哈希的数组(二维数组)或哈希的哈希(哈希表)。 5. 包和模块:Perl有一个庞大的模块生态系统,这些模块可以轻松地集成到Perl程序中,...
3. **字符串和数组**:了解如何在Perl中操作字符串,包括连接、查找、替换等操作,并深入理解数组的概念,包括一维数组、多维数组的使用。 4. **散列(哈希)**:Perl的散列数据结构提供了一种高效的方式来存储和...
9. **引用和数据结构**:Perl允许创建复杂的数据结构,如数组的数组(二维数组)、哈希的哈希等,通过引用机制实现。 10. **函数和过程**:Perl支持自定义函数,以及如何定义和调用它们。 11. **符号表和变量作用...
# 写入二维数组 my @data = ( ['Name', 'Age'], ['John', 30], ['Jane', 25] ); $worksheet->write_col(0, \@data); $workbook->close(); ``` 除了这两个核心模块,还有其他一些扩展模块,如Spreadsheet::Write...
本文档主要介绍如何在半小时内学习使用JSON进行数据传递,包括一维数组与二维数组的传递示例。 一维数组传递示例 在示例中,首先利用JavaScript中的jQuery库来实现异步请求,通过$.getJSON方法向服务器端发送请求,...
- 二维数组用数组引用表示,如`$array_ref = [\@array1, \@array2]`。 - 数组函数包括`pop`、`push`、`shift`和`unshift`,分别用于操作数组的末尾和开头。 - `splice`函数用于在数组中间插入、删除或替换元素。 ...