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 示例脚本
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
;
@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