【Perl】二维数组
- 1 数组与引用
- 2 声明的区别
- 3 访问的区别
- 4 添加行元素
- 5 添加列元素
- 6 访问与打印
- 6.1 运算符优先级
- 6.2 访问一个
- 6.3 遍历
- 7 切片
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);
Author: visaya fan <visayafan[AT]gmail.com or visayafan[AT]163.com>
Date: 2011-10-29 15:00:34
HTML generated by org-mode 6.33x in emacs 23
转载于:https://www.cnblogs.com/visayafan/archive/2011/10/29/2228596.html
【Perl】二维数组相关推荐
- php 二维数组中去重,PHP实现二维数组去重功能示例
PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...
- Java IDEA Debug进制二维数组
1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...
- Python数据挖掘1:创建一位数组和二维数组,取最大最小值,切片
''' 来源:天善智能韦玮老师课堂笔记 1.numpy 可以高效处理数据.提供数组支持.很多模块都依赖他,比如pandas.scipy.matplotlib都依赖他,所以这个模块是基础. 2.pand ...
- Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
1. 创建一个 [3,5] 所有元素为 True 的数组 In [162]: b = np.ones((3,5), dtype=bool)In [163]: b Out[163]: array([[ ...
- Numpy 一维、二维数组、size/dtype/shape属性、数组函数arange/linspace/logspace /diag/zeros/ones/random 、多维数组索引和筛选)
参考: https://gitbook.cn/gitchat/column/undefined/topic/5e3bceadec8d9033cf924665 打开 IPython ,创建 Python ...
- C++二维数组名与数组指针的思考
二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的. 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针.体现在sizeof()上的不同. #include <ios ...
- 建立二维数组_二维数组的 DP
寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...
- c语言N*N的二维数组,c语言高手帮个忙(请先看问题,好解答
程序定义了N×N的二维数组,并在主函数中自动赋值.请编写函数fun(int a[ ][ N ],int n),该函数的功能是使数组左下半三角元素中的值加上n.例如:若n的值为3,a数组中的值为a=2 ...
- cout 数组_C语言学习笔记(十)二维数组内存预设
1 问题描述 二维数组存储数据数量根据其他方法间接获得: 为当前数据数量申请内存: 2 相关程序 #include --2020.11.23--
最新文章
- Python 赋值、浅拷贝、深拷贝的区别?
- 注解版poi操作工具
- 2018年C语言期末考试题及答案,HZNUOJ--2018年秋季学期程序设计基础(C语言)期末考试(补题)...
- python爬取热门新闻每日排行_用python查看百度搜索中今日热点事件排行榜
- HTTPS客户端的java实现
- 吴恩达机器学习视频笔记和编程作业(Python实现)汇总
- 无法弹出U盘的几种解决方法
- 解方程计算器,一款数学神器APP,有需要的自己收藏!
- 《Google软件测试之道》读书笔记---第一章
- 手机只能上QQ不能看网页
- 68个经典励志小故事|哲理小故事,让你终身受益(3)
- eNSP-配置单臂路由与静态路由实验
- #Paper Reading# Implicit Neural Representations with Periodic Activation Functions
- 用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果
- 网络原理 | 网络设备及相关技术(集线器、交换机、主机、路由器)、冲突域与广播域
- [英雄星球六月集训LeetCode解题日报] 第七日 哈希表
- DNA与剑桥的老鹰酒吧
- Matlab:常用命令大全
- GV2、GV3、GV4热磁和单磁断路器区别是什么?
- webpack打包时提示Invalid configuration object错误