几乎所有的数组操作都可用 splice 实现。 除了第一个参数,数组,为必须,其余的参数都不是必须的。

  1. splice ARRAY, OFFSET, LENGTH, LIST

OFFSET 和 LENGTH 定义了 ARRAY 中将要删除的部分, LIST 表示在删除的位置上要添加的元素。 如果LIST 省略,表示只删除,不增加。

  • 怎样从数组中删除元素

  1. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  2. splice @dwarfs, , ;
  3. # 从Sleepy 删除2个元素,移除Sleepy Sneezy
  4. print "@dwarfs"; # Doc Grumpy Happy Dopey Bashful
  • 怎样在数组中添加一个元素?

  1. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  2. splice @dwarfs, , , 'SnowWhite';
  3. # 0 表示不移除,添加后边的列表
  4. print "@dwarfs";
  5. # Doc Grumpy Happy SnowWhite Sleepy Sneezy Dopey Bashful
  • 怎样在数组中增添多个元素?

其实,增添一个元素是增添多个元素的特殊情况。

  1. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  2. splice @dwarfs, , , 'SnowWhite', 'Humbert';
  3. print "@dwarfs";
  4.  
  5. # Doc Grumpy Happy SnowWhite Humbert Sleepy Sneezy Dopey Bashful
  • 怎样把一个数组中的元素添加到另一个数组中?

只要把splice的第四个参数换成你想要添加的数组就好了。

  1. my @others = qw(SnowWhite Humbert);
  2. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  3. splice @dwarfs, , , @others;
  4. print "@dwarfs";
  5.  
  6. # Doc Grumpy Happy SnowWhite Humbert Sleepy Sneezy Dopey Bashful
  • 替换掉数组中的某些元素?

添加和删除一起完成。

  1. my @others = qw(SnowWhite Humbert);
  2. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  3. splice @dwarfs, , , @others;
  4. print "@dwarfs\n";
  5.  
  6. # Doc Grumpy SnowWhite Humbert Bashful
  • 返回值

在 LIST 情境 splice 返回移除的值.

  1. my @others = qw(SnowWhite Humbert);
  2. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  3. my @who = splice @dwarfs, , , @others;
  4. print "@who\n";
  5.  
  6. # Sleepy Sneezy

在 SCALAR 情境,返回最后一个移除的值,如果没有值被移除,则返回 undef。

  1. my @others = qw(SnowWhite Humbert);
  2. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  3. my $who = splice @dwarfs, , , @others;
  4. print "$who\n";
  5.  
  6. # Sneezy
  • 参数为负值?

偏移值(OFFSET)和长度(LENGTH)值都可以为负数,表示从数组的末尾算起。

  1. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  2.  
  3. #偏移为3,即从第四个算起,-1 表示直到整个数组的倒数第一个。
  4. my @who = splice @dwarfs, , -;
  5. print "@who";
  6.  
  7. # Sleepy Sneezy Dopey
  1. my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
  2.  
  3. #从倒数第三个开始,向右移除的第一个元素。
  4. my @who = splice @dwarfs, -, ;
  5. print "@who";
  6.  
  7. # Sneezy

splice 操作符的更多相关文章

  1. perl学习之路3

    Perl编程之路3 标签: perl 列表与数组   Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...

  2. perl语言入门总结-第3章-列表与数组

    1-列表list指的是标题的有序集合, 而数组(array)则是存储列表的变量. 更精确地说,列表指的是数据,而数组指的是变量. 访问数组中的元素 ] = "yabba"; ] = ...

  3. perl第三章 列表和数组

    访问数组中的元素    $fred[0]   $fred[1] $number=2.75; print $fred[$number-1]  结果就是print $fred[1] 特殊的数组索引1.对索 ...

  4. Perl语言入门(中文版)(第6版) 东南大学出版社

    第一章简介 问题与答案 这本书适合你吗? 为何有这么多的脚注? 关于习题和解答? 习题前标的数字是什么意思? 如果我是Perl讲师? “Perl”这个词表示什么意思? Larry为什么要创造Perl? ...

  5. JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别

    ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...

  6. [转] JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别

    ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...

  7. JavaScript基本知识----操作符,流程控制,循环,字符串方法,数组方式,补充方法

    操作符 算术运算 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. JS 操作符、控制流程、循环、字符串/数组方法

    操作符 算术运算符:+ .- . * . / . %.++.-- 赋值运算符:= .+=.-=. *=./=.%= 比较运算符:>.>=.<.<=.!=.==.===(全等,数 ...

  9. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

随机推荐

  1. Learn Objectvie-C on the Mac 2nd Edition 笔记

    Chapter 1Apple’s Cocoa (for OS X) 和 Cocoa Touch (for iOS) toolkits 都是用 Objective-C写的. Chapter 2 (1)  ...

  2. HDOJ 1032(POJ 1207) The 3n + 1 problem

    Description Problems in Computer Science are often classified as belonging to a certain class of pro ...

  3. QT静态链接

    想把QT的程序链接成一个独立的EXE以方便使用,查了很多资料都需要自行编译QT. 搜索了很多的资料,发篇写得比较简明一些:http://my.oschina.net/weiweiqiao/blog/2 ...

  4. Nova 无法向虚机注入密钥

    欢迎各位关注我的博客:http://weibo.com/u/216633637 废话开头: 之前参考这位同学的博客http://www.cnblogs.com/awy-blog/p/3447176.h ...

  5. struts2 最新S2-016-S2-017漏洞通杀struts2所有版本及修复方法

    详情查看http://zone.wooyun.org/content/5159 官方漏洞说明 http://struts.apache.org/release/2.3.x/docs/s2-016.ht ...

  6. [NOIP2015pj题解]From某因为时间快了那么一点点超过下一位的蒟蒻(其实是纯代码).

    第一题,很水,直接上代码 #include <iostream> #include <fstream> #include <cstdlib> /* run this ...

  7. 如何解决 SogouIinput not enough space for thread data ?? 虚拟内存

    问题:总是提示没有足够的空间读写数据 上图: 原因: 可能是虚拟内存设置了过大了[我不知道明白是不是也是这样,我出现这个问题就是因为我把虚拟内存设置成了4G,我的物理内存是2G的] 具体问题具体分析, ...

  8. Open XML Format SDK引用

    Excel的便捷使得其在非开发人员的办公中非常流行,而Excel确实也提供了很多有用的功能.很多时候我们还需要以Excel为数据源来进行处理或者将Excel作为模板来生成一些报表.在Open XML ...

  9. 另5个你不知道的HTML5接口API

    原文地址: 5 More HTML5 APIs You Didn’t Know Existed 演示地址: 全屏API Demo 原文日期: 2012年11月08日 翻译日期: 2013年08月13日 ...

  10. Qt 学习之路:Graphics View Framework

    Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转.我们通常所说的 Linux 的 KD ...