07. Perl 数据类型-数组常用API

    xiaoxiao2022-07-04  159

    Perl 语言强大的数组的特性,离不开强大而便捷的API支持。Perl 数组提供了很多强大而便捷的API.

    1. 常用API

    方法描述示例push从数组尾部压入一个或多个元素, 返回新数组元素个数$length=push(@books, ‘es’); $length= push(@books, @ints);pop从数组尾部弹出(删除)一个元素, 返回删除的元素$el = pop @books;unshift从数组头部压入一个或多个元素, 返回新数组元素个数$length=unshift(@books, ‘es’); $length= unshift(@books, @ints);shift从数组头部弹出(删除)一个元素, 返回删除的袁术$el = shift @books;reverse反转数组, 返回反转之后的数组,不会修改原数组@books2 = reverse @books;sort对数组按字符串升序排列, 返回排序后的数组, 不会修改原数组@books3 = sort @books;splice对任意数组元素进行删除,替换,插入操作, 会修改原数组语法格式:splice(目标数组, 开始数组下标, 删除个数, 替换数组)

    2. 高级用法

    2.1 数组元素提取grep

    grep 可以从数组中提取符合规则的元素组成新的数组grep 不会修改原数组的内容grep 通常和正则表达式结合 使用grep 可接单行多行操作grep 不会对原数组产生影响 用法示例描述@jaArray = grep /ja/, @books;提取books 数组中所有包含ja的元素,组成新的数组@JAArray = grep s/ja/JA/, @books;提取books 数组中所有包含ja的元素, 并将ja替换为JA后组成新 数组@JAArray = grep { /ja/; print “$_”;} @books;提取books 中所有包含ja的元素, 遍历过程中输出每一个元素,(笔者目前并没有发现适合此种用法的场景)

    2.2 splice 删除,替换数组元素

    使用splice 可以进行删除替换数组元素, 语法: splice(目标数组,开始删除的索引, 删除个数, 替换数组)数组索引: 要删除开始的索引, 包含此索引元素批量操作时,只能是连续的批量操作, 不能是间隔的批量操作.splice 直接对元素组进行操作, 每一个操作都会影响原来的数组. 语法描述splice(@array, $idx);批量连续删除:删除索引idx及以后的元素, 返回删除的所有元素splice(@array, $idx, n);批量连续删除:删除从索引idx开始的n个元素, 返回删除的所有元素splice(@array, $idx, 1);单个删除:删除索引为idx 的元素, 返回删除的一个元素splice(@array, $idx, 0, @array);插入: 索引idx 后插入数组或列表splice(@array, $idx, 1, $el);单个替换: 替换索引为idx 的元素为elsplice(@array, $idx, n, @array);批量连续替换: 依次替换从索引idx开始的n个元素为数组内容

    2.3 工具类方法

    perl 自带了List::Util 模块, 封装了一些常用的工具类方法, 但是需要引入List::Util 模块儿.引入方式: use List::Util; 方法描述示例min对数组元素按数值型直接量计算最小值, 返回最小值$min = List::Util::min(@ints);max对数组元素按数值型直接量计算最大值, 返回最大值$max = List::Util::max(@ints);sum对数组元素按数值型直接量求和, 返回数组元素和$sum = List::Util::sum(@ints);minstr对数组元素按字符串直接量计算最小值, 返回最小值$minstr = List::Util::minstr(@books);maxstr对数组元素按字符串直接量计算最大值, 返回最大值$maxstr = List::Util::maxstr(@books);shuffle对数组随机排序, 返回排序后的数组, 不影响原数组@ints_random = List::Util::shuffle(@ints);

    3. 综合示例

    3.1 示例脚本

    #!/usr/bin/perl #Desc 数组API 示例程序 #Auth zongf use List::Util; print "\n#################### 1 数组常用方法 ####################\n"; print "push: 向ints 尾部添加一个元素a \n"; @ints = (0 .. 9); $length = push(@ints, a); print "length:$length, ints: @ints \n"; print "pop: 向ints 尾部弹出(删除)一个元素 \n"; @ints = (0 .. 9); $del = pop @ints ; print "del:$del, ints: @ints \n"; print "push: 向ints 头部添加一个元素a \n"; @ints = (0 .. 9); $length = unshift(@ints, a); print "length:$length, ints: @ints \n"; print "push: 向ints 头部弹出(删除)一个元素 \n"; @ints = (0 .. 9); $del = shift @ints; print "del:$del, ints: @ints \n"; print "reverse: 反转数组: \n"; @ints = (0 ..9); @r_ints = reverse @ints; print "ints: @ints, r_ints: @r_ints\n"; print "sort: 按字符串排序: \n"; @ints = (0..9); @s_ints = sort @ints; print "ints:@ints, s_ints: @s_ints\n"; print "\n#################### 2.1 高级用法:grep 过滤数组 ####################\n"; @books = ("java", "javaScript" , "spring", "spring-mvc"); print "books: @books \n"; @javas = grep /java/, @books; print "javas: @javas, books: @books \n"; @JAVAs = grep s/java/JAVA/g, @books; print "JAVA: @JAVAs, books: @books \n"; @javas = grep { /java/; print "$_"; } @books; print "\n#################### 2.2 高级用法:splice 删除, 插入,替换元素 ####################\n"; @ints = ( 0..9); print "ints; @ints \n"; print "连续删除: 删除索引为5及之后的索引元素:\n"; @ints = (0..9); @dels = splice(@ints, 5); print "ints: @ints, delete:@dels \n"; print "连续删除: 删除从索引5开始的3个元素, 即索引5, 6, 7:\n"; @ints = (0..9); @dels = splice(@ints, 5, 3); print "ints: @ints, delete: @dels \n"; print "单个删除: 删除索引5元素:\n"; @ints = (0..9); $del = splice(@ints, 5, 1); print "ints: @ints, delete: $del \n"; #插入元素 print "插入元素: 索引5后面插入3个元素:\n"; @ints = (0..9); splice(@ints, 5, 0, (a, b, c) ); print "ints: @ints \n"; #替换单个元素 print "替换单个元素: 将索引5的元素替换为a: \n"; @ints = (0..9); splice(@ints, 5, 1, a); print "ints: @ints \n"; #替换连续元素 print "替换连续元素: 将从索引5开始的2个元素依次替换为a,b: \n"; @ints = (0..9); splice(@ints, 5, 2, (a, b)); print "ints: @ints \n"; print "\n#################### 2.3 工具类常用方法 ####################\n"; @ints = (0..10); print "按数字直接量计算最大值, 最小值, 求和:@ints \n"; $min = List::Util::min(@ints); $max = List::Util::max(@ints); $sum = List::Util::sum(@ints); print "min:$min, max:$max, sum:$sum \n"; @books = ("java", "mysql", "linux", "elastic"); print "按字符串直接量计算最大值, 最小值: @books \n"; $minstr = List::Util::minstr(@books); $maxstr = List::Util::maxstr(@books); print "minstr:$minstr, maxstr:$maxstr \n"; print "随机排列数组: @ints \n"; @s_ints = List::Util::shuffle(@ints); print "ints : @ints \n"; print "s_ints: @s_ints \n";

    3.2 示例输出

    #################### 4.1 数组常用方法 #################### push: 向ints 尾部添加一个元素a length:11, ints: 0 1 2 3 4 5 6 7 8 9 a pop: 向ints 尾部弹出(删除)一个元素 del:9, ints: 0 1 2 3 4 5 6 7 8 push: 向ints 头部添加一个元素a length:11, ints: a 0 1 2 3 4 5 6 7 8 9 push: 向ints 头部弹出(删除)一个元素 del:0, ints: 1 2 3 4 5 6 7 8 9 reverse: 反转数组: ints: 0 1 2 3 4 5 6 7 8 9, r_ints: 9 8 7 6 5 4 3 2 1 0 sort: 按字符串排序: ints:0 1 2 3 4 5 6 7 8 9, s_ints: 0 1 2 3 4 5 6 7 8 9 #################### 1 数组常用方法 #################### push: 向ints 尾部添加一个元素a length:11, ints: 0 1 2 3 4 5 6 7 8 9 a pop: 向ints 尾部弹出(删除)一个元素 del:9, ints: 0 1 2 3 4 5 6 7 8 push: 向ints 头部添加一个元素a length:11, ints: a 0 1 2 3 4 5 6 7 8 9 push: 向ints 头部弹出(删除)一个元素 del:0, ints: 1 2 3 4 5 6 7 8 9 reverse: 反转数组: ints: 0 1 2 3 4 5 6 7 8 9, r_ints: 9 8 7 6 5 4 3 2 1 0 sort: 按字符串排序: ints:0 1 2 3 4 5 6 7 8 9, s_ints: 0 1 2 3 4 5 6 7 8 9 #################### 2.1 高级用法:grep 过滤数组 #################### books: java javaScript spring spring-mvc javas: java javaScript, books: java javaScript spring spring-mvc JAVA: JAVA JAVAScript, books: JAVA JAVAScript spring spring-mvc JAVAJAVAScriptspringspring-mvc #################### 2.2 高级用法:splice 删除, 插入,替换元素 #################### ints; 0 1 2 3 4 5 6 7 8 9 连续删除: 删除索引为5及之后的索引元素: ints: 0 1 2 3 4, delete:5 6 7 8 9 连续删除: 删除从索引5开始的3个元素, 即索引5, 6, 7: ints: 0 1 2 3 4 8 9, delete: 5 6 7 单个删除: 删除索引5元素: ints: 0 1 2 3 4 6 7 8 9, delete: 5 插入元素: 索引5后面插入3个元素: ints: 0 1 2 3 4 a b c 5 6 7 8 9 替换单个元素: 将索引5的元素替换为a: ints: 0 1 2 3 4 a 6 7 8 9 替换连续元素: 将从索引5开始的2个元素依次替换为a,b: ints: 0 1 2 3 4 a b 7 8 9 #################### 2.3 工具类常用方法 #################### 按数字直接量计算最大值, 最小值, 求和:0 1 2 3 4 5 6 7 8 9 10 min:0, max:10, sum:55 按字符串直接量计算最大值, 最小值: java mysql linux elastic minstr:elastic, maxstr:mysql 随机排列数组: 0 1 2 3 4 5 6 7 8 9 10 ints : 0 1 2 3 4 5 6 7 8 9 10 s_ints: 4 0 5 3 7 6 10 8 9 1 2
    最新回复(0)