06. Perl 数据类型-数组基本用法

    xiaoxiao2022-07-04  153

    Perl 语言中提供了数组变量, 用于标识一组元素的集合. Perl 的数组功能是非常强大的, 不仅可以作为数组,还可以做为栈或队列使用。

    1. 数组特性

    perl 数组元素类型可以是字符串, 也可以是数字perl 数组可以当做栈使用perl 数组可以当做队列使用perl 数组支持反向索引perl 数组可以不定义直接使用, 在使用的同时自动创建

    2. 数组基本操作

    2.1 创建数组

    数组变量名: @+变量名, 如:@abooks, @studentsperl 数组可在定义的时候, 直接使用列表直接量赋值使用数组元素赋值时, 如果数组未定义,那么会自动创建一个新的全局数组. 创建方式示例创建空数组@null = ();创建数字数组@ints = ( 1, 2, 3, 4); @ints = ( 1…4 );复制数组@ints2 = @ints;创建混合数组@array = (@ints, 1…3, $name );数组元素赋值$array[0]=“java”

    2.2 数组引用

    数组元素引用格式: $array[index], array 为数组名称, index 为索引号数组元素为单数, 用$符号引用; 数组本身为复数, 使用@引用.数组正向索引下标从0 开始, 0 表示从前向后第一个元素数组反向索引下标从-1 开始, 表示从后向前第一个元素 数组引用示例描述元素引用$books[0], $books[1]引用数组中单一元素整体引用@books, @ints引用数组整体

    2.3 数组元素提取

    使用@符合可以提取数组中的多个元素组成新的数组或为标量批量赋值:

    提取为数组: @array=@books[0,3];批量赋值: ($book0, $book3) = @books[0,3];

    2.4. 字符串内插数组

    字符串中可直接内插数组或数组元素, 这是perl 的一个非常方便的功能. 常在开发测试脚本过程中使用. 数组内插示例描述内插元素“KaTeX parse error: Expected 'EOF', got '\[' at position 6: books\̲[̲0\]", "books[1]”和普通标量内插无异内插数组@books, @ints将所用元素依次用空格隔开,组成一个字符串

    2.5 数组上下文

    perl 的数组是非常智能的, 能够揣摩你的代码上下文, 给你不同的返回上下文是指,根据左侧变量类型,使用数组做不同的赋值. 数组上下文示例描述数组上下文@array_1 = @array_name;等号左侧为数组, 因此此语句表示复制数组标量上下文$length = @array_name等号左侧为标量, 标量表示单数, 所以此表达式为获取数组长度哈希上下文%hash = @array_name等号左侧为哈希变量, 则表示将数组转换为哈希结构

    3. 数组遍历

    perl 语言中对数组的遍历方式很多, 使用起来及其方便.不同的遍历方式适用不同的场景, 笔者建议全部掌握这五种遍历方式

    3.1 字符串内插法遍历

    字符串内插法遍历是最简单的遍历方法, $# 表示数组的最大索引值, 为数组长度-1数组元素之间用空格隔开, 当数组元素本身就有空格时, 展示有有点问题了.通常只用于测试阶段对数组做简单输出, 方便快捷 @books = ("java", "mysql", "linux", "perl"); print "books--maxIdx: $#books, elements:@books\n";

    3.2 foreach 单行遍历

    使用foreach 和内置变量$_ 遍历, $_ 表示数组中的一个元素通常用于遍历输出, 数组元素转字符串等操作. print "$_\n" foreach @books;

    3.3 foreach-默认变量遍历

    使用foreach + 内置变量方式遍历数组, 每次遍历中可做一些业务处理只能获取数组元素内容, 不能获取数组元素与索引的对应关系 foreach (@books){ print "$_\n"; }

    3.4 for 循环遍历

    普通的for 循环遍历, $# 表示获取到数组索引最大值能获取数组元素与索引的对应关系 for my $idx (0..$#books){ print "$idx --> $bookArray[$idx]\n"; }

    3.5 while-each 列表遍历法

    while-each 直接把索引值和数组元素组成一个key-value 的列表能获取数组元素与索引的对应关系 while(my ($idx, $val) = each @bookArray){ print "$idx --> $val\n"; }

    4. 综合示例

    4.1 示例脚本

    #!/usr/bin/perl #Desc 数组基本操作示例脚本 #Auth zongf #Date 2019-05-21 print "\n#################### 2.1 创建数组 ####################\n"; #创建空数组: @null=(); print "null: @null \n"; #创建数字数组 @ints = ( 0, 1, 2, 3..8, 9); print "ints: @ints \n"; #复制创建数组 @ints2 = @ints; print "ints2: @ints2 \n"; #创建混合数组 @arrays = ( a, b, @ints, "java"); print "arrays:@arrays \n"; #自动创建 $ints[1] = "java"; print "ints: @ints \n"; print "\n#################### 2.2 数组引用 ####################\n"; #单个元素引用 $int0 = $ints[0]; print "int[0]:$ints[0]\n"; #数组整体引用 @ints3 = @ints; print "ints3: @ints \n"; print "\n#################### 2.3 数组元素提取 ####################\n"; @int_3_7 = @ints[3, 7]; print "ints[3]-ints[7]: @int_3_7 \n"; print "\n#################### 2.4 字符串内插 ####################\n"; #数组内插 print "ints: @ints \n"; #数组元素内插 print "int[0]: $ints[0] \n"; print "\n#################### 2.5 数组上下文 ####################\n"; #标量上下文 $length = @ints; print "ints length: $length \n"; #数组上下文: @ints4 = @ints; print "ints4: @ints4 \n"; #哈希上下文: @chars = ( A, 'a', B, 'b', C, 'c'); %char_hs = @chars; @char_keys = keys %char_hs; @char_vals = values %char_hs; print "keys: @char_keys, values: @char_vals \n"; @ints = ( 0 ..9 ); print "\n#################### 3.1 字符串内插法遍历 ####################\n"; print "ints: @ints"; print "\n#################### 3.2 foreach 单行遍历 ####################\n"; print "$_\n" foreach @ints; print "\n#################### 3.3 foreach 默认变量遍历 ####################\n"; foreach (@ints){ print "$_\n"; } print "\n#################### 3.4 for 循环遍历 ####################\n"; for my $idx (0..$#ints){ print "ints[$idx]=$ints[$idx]\n"; } print "\n#################### 3.5 while-each 列表遍历 ####################\n"; # 需要5.12+版本才行 while(my ($idx, $val) = each @ints ) { print "ints[$idx]=$val \n"; }

    4.2 示例输出

    #################### 2.1 创建数组 #################### null: ints: 0 1 2 3 4 5 6 7 8 9 ints2: 0 1 2 3 4 5 6 7 8 9 arrays:a b 0 1 2 3 4 5 6 7 8 9 java ints: 0 java 2 3 4 5 6 7 8 9 #################### 2.2 数组引用 #################### int[0]:0 ints3: 0 java 2 3 4 5 6 7 8 9 #################### 2.3 数组元素提取 #################### ints[3]-ints[7]: 3 7 #################### 2.4 字符串内插 #################### ints: 0 java 2 3 4 5 6 7 8 9 int[0]: 0 #################### 2.5 数组上下文 #################### ints length: 10 ints4: 0 java 2 3 4 5 6 7 8 9 keys: A B C, values: a b c #################### 3.1 字符串内插法遍历 #################### ints: 0 1 2 3 4 5 6 7 8 9 #################### 3.2 foreach 单行遍历 #################### 0 1 2 3 4 5 6 7 8 9 #################### 3.3 foreach 默认变量遍历 #################### 0 1 2 3 4 5 6 7 8 9 #################### 3.4 for 循环遍历 #################### ints[0]=0 ints[1]=1 ints[2]=2 ints[3]=3 ints[4]=4 ints[5]=5 ints[6]=6 ints[7]=7 ints[8]=8 ints[9]=9 #################### 3.5 while-each 列表遍历 #################### ints[0]=0 ints[1]=1 ints[2]=2 ints[3]=3 ints[4]=4 ints[5]=5 ints[6]=6 ints[7]=7 ints[8]=8 ints[9]=9
    最新回复(0)