`
zhongguo168a
  • 浏览: 45643 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

我也水一个读书笔记!Array 数组

阅读更多

我也水一个读书笔记!Array 数组

Array 数组
来源:http://bbs.actionscript3.cn/thread-1635-1-3.html
声名数组:例

var a:Array;//声名一个a数组,但没有告诉a这个引用指向.trace (a);//得到null

var b:Array=[];//声名一个空数组b,trace(b);//得到空白显示

var c:Array=new Array();//等同b

(var b:Array=["01","02"];trace(b);//输出01,02)(var b:Array=new Array("01","02");trace(b);//输01,02)

var d:Array=new Array(5);//声名一个长度为5的空数组

访问数组元素:

索引方式:0开始-N 例:var foo:Array=["1","2","3"];trace(foo[0]);//输出1

数组的长度:

数组的长度(length)属性不是创建好就固定不变的,数组的长度可以随着成员的增加删除而变化,length是uint型,即非负整数.

实现方式:public function get length():uint 或 public function set length(value:uint):void 例:trace(foo.length);

Object 及关联数组:

实现方式:var foo:Object=new Object();或var foo:Object={};

实例(1):var foo:Object={name:"haishabei",web:"haishabei.net"};trace(foo.name); //输出haishabei

实例(2):

var bar :Object={hello:function (){trace("haishabei");},ok:function():String{return "haishabei-net";}};
bar.hello();//输出haihsabei
trace(bar.ok());//输出haihsabei-net

实例(3):

//先初始化,之后在新增属性和动态添加方法
var kk:Object={};
kk.name="haishabei";
kk.hello=function (){
trace(".net")
};
trace(kk.name);//输出haishabei
trace(kk["name"]);//输出haishabei
kk.hello();//输出.net

多维数组(嵌套数组)

例:

//直接用中括号嵌套来创建多维数组
var tt1:Array=[[1,2,3],[4,5,6],[7,8,9]];
trace(tt1[2]);//输出7,8,9
trace(tt1[2][1]);//输出8

//使用构造函数来创建多维数组
var tt2:Array=new Array(new Array(1,2,3),new Array(4,5,6),new Array(7,8,9));
trace(tt2[2][1]);//输出8

//先定义数组长度,再一一添加子数组
var tt3:Array=new Array(3);
tt3[0]=[1,2,3];
tt3[1]=[4,5,6];
tt3[2]=[7,8,9];
trace(tt3[2][1]);//输出8

数组Array 的基本操作:

1>查找:indexOf、lastIndexOf(indexOf是从左到右查找,lastIndexOf是从右到左,如果找到返回索引值,找不到返回-1)

用法格式:

目标数组.indexOf(要查找的元素);

目标数组.indexOf(要查找的元素,查找的起始位置);

目标数组.lastIindexOf(要查找的元素);

目标数组.lastIndexOf(要查找的元素,查找的起始位置);

2>在数组首尾新增元素:push、unshift(这2种方法都有返回值,返回值是增加元素后的数组长度)

用法格式:

数组.push(元素1,元素2,...元素N);//在数组首

数组.unshift(元素1,元素2,...元素N);//在数组尾

3>删除数组首尾元素:shift、pop(这2种方法都有返回值,返回值就是那个被删除的元素)

用法格式:

数组.pop();//删除尾部

数组.shift();//删除头部

4>在数组中插入或删除元素:灵活多变的splice(返回值是被删除的元素)

用法格式:

//(1)从数组没位置开始,删除指定数目的元素,并插入一些新元素.

数组.splice(删除点的索引,要删除的元素的数目,新增元素1,...新增元素N);

//(2)删除数组中某位置之后的几个元素.

数组.splice(删除点的索引,要删除的元素的数目);

//(3)删除数组中某位置之后的所有元素

数组.splice(删除点的索引);

//(4)在数组中某位置之后,插入新元素

数组.splice(删除点的索引,0,新增元素1,...新增元素N);

5>获取数组中的部分元素:slice

(可以获取数组中连续的元素,而不改变原有数组的内容,slice的返回值是截取的元素组成的新数组,新数组中包括起点索引的元素,而不包括终点索引的元素)

用法:数组.slice(起点索引,终点索引);

数组.slice(起点索引);//返回包括起点索引的元素和之后的全部元素组成的新数组.

6>将多个元素或数组拼合成新数组:concat

(可以将多个元素或数组拼合成一个新数组,并且且通过返回值返回,不改变原有数组内容)

用法:数组.concat(参数 1,参数 2,...参数 N);

例:var foo:Array=["A","B","C"];

var bar1:int=1;

var bar2:Array=[2,3,4,5];

var newfoo=foo.concat(bar1,bar2);

trace(newfoo); //A,B,C,1,2,3,4,5

*******
(到这发现个问题 :var bar2:Array=[2,3,4,5];这么写没问题 ,而var foo:Array=[A,B,C];这样则报错,

这是因为var foo:Array=[A,B,C]中的三个元素全部被看成变量,但是这三个变量都未声明.//因为默认下除了数字能自动转化为数字类型外,字符是默认看成变量的.)
*******

7>浅复制与深复制

[1]当数组元素全部是基元数据类型,即全都是值类型.没有深浅复制的分别.

[2]当数组元素全是复杂数据类型,即引用类型.分深浅复制.

----------------------------------------------------------------------------

1.生成浅复制只需要原数组的slice方法或concat方法不传任何参数.即可生成浅复制.

方法:var copy:Array=tt.concat();或var copy:Array=tt.slice();

*****

使用浅复制生成的新数组,其各个元素存放的只是引用.两个数组中相同位置的元素存放的引用指向同一个对象 .那么
,如果对该元素操作,就等于是操作引用指向的对象.如果该对象状态发生变化,那么也会影响到另一个数组中相对应的元素.

*****

例(1)
var ob:Object={name:"haishabei",web:"haishabei.net"};
var obb:Array=[1,2,3];
var foo:Array=["456j",obb,ob];
//var bar:Array=foo.slice();
var bar=foo.slice();
trace(foo);//456j,1,2,3,[object Object]
trace(bar);//456j,1,2,3,[object Object]
bar[0]="ttttt";
bar[1][0]=150;
bar[2].name="0000000h";
trace(foo);//456j,150,2,3,[object Object]
trace(bar);//ttttt,150,2,3,[object Object]
trace(foo[2].name);//0000000h
trace(bar[2].name);//0000000h

---------------------------------------------------------------------------------------
2.深复制:使用深复制生成的新数组,其所有元素都是真正的原数组元素的备份.这时两个数组中相同位置的元素,存放的是不同的引用,
指向不同的对象.但是这两个对象的状态是完全一致的.

例(2)

var ob:Object={name:"haishabei",web:"haishabei.net"};
var obb:Array=[1,2,3];
var foo:Array=["456j",obb,ob];

//下4行深复制数组foo
var fooBA:ByteArray= new ByteArray();
fooBA.writeObject(foo);
fooBA.position=0;
var bar:Array=fooBA.readObject() as Array;
trace(foo);//456j,1,2,3,[object Object]
trace(bar);//456j,1,2,3,[object Object]
bar[0]="www";
bar[1][0]=150;
bar[2].web=".com";
trace(foo);//456j,1,2,3,[object Object]
trace(bar);//www,150,2,3,[object Object]
trace(foo[2].web);//haishabei.net
trace(bar[2].web);//.com

8>排序:reverse、sort、sortOn

[1]reverse 方法能将数组元素倒序,返回新数组.用法:数组.reverse();

[2]sort方法是对数组元素排序.有3种方法.

[2][1]数组.sort();//默认排序

[2][2]数组.sort(排列方式);//使用"排序方式"参数来排序,排列方式是一些定义好的整数常量

[2][3]数组.sort(比较函数);//使用自定义的比较函数,注意此处只写函数名即可.

当数组元素是复杂数据型,且需要根据这种对象的某个属性值来排序时就需要sortOn方法.

数组.sortOn("name");//根据指定属性,默认排序.

数组.sortOn("name",排序方式);//根据指定属性,使用指定的"排序方式"来排序.

数组.sortOn("name",比较函数);//根据指定属性,使用自定义函数排序.

[2][1]默认排序sort();//默认排序是按照字符串字母顺序的,返回值是排序后的数组./*如果数组中的元素是数值,默认排序也会把它当成字符串来排序*/

例:

var ary:Array=["A","C","B"];
var Numberary:Array=[2005,12,1000];
trace(ary.sort());//A,B,C
trace(Numberary.sort());//1000,12,2005

[2][2]排序方式:

Array.CASEINSENSITIVE 值为:1 ,表示大小写不敏感按字母顺序排序,如果是数字则从小到大.

Array.DESCENDING 值为:2 ,表示按字母倒序排列

Array.UNIQUESORT 值为:4 ,表示必须是唯一性排序,如果比较值结果相同,则放弃排序.

Array.RETURNINDEXEDARRAY 值为:8 ,让sort()和sortOn()函数返回值返回排序后的索引列表,同时保持原数组不变.

Array.NUMERIC or 16 值为:16 ,强制sort()和sortOn()中对数值采用从小到大排序,否则,不设方式.sort()和sortOn()将把数字当成字符串来排序.

排序方式可以同时用多个,使用"|"号隔开.

[2][3]比较函数.(比较函数要求是,有两个参数,返回值是1,0,-1中的一个.)

格式:function 函数名(参数A:类型,参数B:类型):int{...}

例:

var a:Object={price:20,number:3};
var b:Object={price:10,number:7};
var c:Object={price:50,number:1};
var amountAry:Array=[a,b,c];
function compare(paraA:Object,paraB:Object):int {
var resultA=paraA.price*paraA.number;
var resultB=paraB.price*paraB.number;
if (resultA>resultB) {
return 1;
}
if (resultA<resultB) {
return -1;
}
return 0;
}
amountAry.sort(compare);
trace(amountAry[0].price);//50
trace(amountAry[1].price);//20
trace(amountAry[2].price);//10
分享到:
评论

相关推荐

    [原创] SV中数组代码实践笔记

    例如,如果我们想创建一个存储16个整数的数组,可以写成`int arr[16];`。数组的下标通常从0开始。 2. **初始化**:数组可以在声明时初始化,也可以在程序运行时动态赋值。静态初始化如`int arr[4] = '{10, 20, 30, ...

    php array的学习笔记

    5. array_diff()函数:这个函数比较两个数组,并返回一个数组,其中包含了所有出现在第一个数组但不在其他数组中的值。它可以帮助我们找出数组间差异的元素。 除了上述函数,文档中还提到了var_dump()和print_r()两...

    PHP开发笔记系列(九)- 数组(三)

    2. `array_push()`:将一个或多个元素添加到数组的末尾。 3. `array_pop()`:移除并返回数组的最后一个元素。 4. `array_unshift()`:在数组开头添加一个或多个元素。 5. `array_shift()`:移除并返回数组的第一个...

    有关数组的一点个人笔记

    数组的索引是从0开始的,这意味着`numbers[0]`是第一个元素,`numbers[4]`是最后一个元素。你可以通过索引来访问和修改数组中的元素,如下所示: ```java numbers[0] = 1; // 设置第一个元素为1 int firstValue = ...

    JavaScript数组对象JSON学习笔记

    - 在数组末尾添加一个或多个元素,并返回新数组的长度: ```javascript array43.push(200); array43.push(201, 202); ``` - 删除并返回数组的最后一个元素: ```javascript var arraypop = array43.pop(); ...

    后缀数组资料打包(论文+PPT+笔记)

    后缀数组的概念首次由Manber和Myers在1993年提出,其核心思想是将一个字符串的所有后缀按照字典序排序,然后存储这些后缀的起始位置。 ### 后缀数组的定义与构造 1. **定义**:给定一个字符串S,它的后缀数组是一...

    流畅的python 阅读笔记(第二章 序列构成的数组)

    ### 流畅的Python阅读笔记(第二章 序列构成的数组) #### 1. 序列的分类 在Python中,序列是一个重要的概念,它指的是由一系列元素组成的有序集合。根据序列的特点,我们可以将其分为不同的类型: 1. **容器序列...

    javascript框架设计读书笔记之数组的扩展与修复

    在JavaScript框架设计中,数组的扩展与修复是一个重要的主题,特别是在处理浏览器兼容性和优化性能时。以下是关于数组的一些关键知识点: 1. `indexOf` 和 `lastIndexOf` 方法的兼容性修复: 在早期的IE7中,原生...

    JavaScript_DOM_编程艺术读书笔记

    ### JavaScript DOM 编程艺术读书笔记关键知识点解析 #### 一、JavaScript简史与相关技术简介 - **XHTML(可扩展的超文本标记语言)**:这是一种更加严格、更加强大的HTML版本,旨在提高网页的可读性和可扩展性。 ...

    c-dynamic-array-master.zip

    这个“c-dynamic-array-master.zip”压缩包文件包含了一个关于C++动态数组的学习资源,很可能是笔记、代码示例或者教程。下面我们将深入探讨动态数组的相关知识点。 1. **静态数组与动态数组的区别** - 静态数组:...

    《C++编程思想》阅读笔记

    根据提供的《C++编程思想》阅读笔记中的内容,我们可以从中提炼出以下详细的C++知识点: ### 1. 声明与定义的区别 - **声明**:声明是告诉编译器一个标识符的存在及其类型,但并不为其分配内存。例如使用`extern`...

    JS随机洗牌算法之数组随机排序

    推荐阅读:JavaScript学习笔记之数组的增、删、改、查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列。举例来说,我们有一...

    02-array-flatten.md

    这是一个典型的数组操作问题,考察应聘者对JavaScript中数组方法的熟悉程度,以及在不使用现成库的情况下解决问题的能力。正确的答案需要遍历数组,并对每个元素进行判断。如果元素是数字,则直接累加;如果元素是...

    JavaScript高级程序设计 读书笔记之九 本地对象Array

    ### JavaScript高级程序设计读书笔记之九:本地对象Array #### 创建Array对象 在JavaScript中,`Array`是一种非常重要的本地对象,主要用于存储一系列有序的数据。创建`Array`对象的方法有多种,具体包括: 1. **...

    c#集合的学习读书笔记 学习心得

    数组大小在创建时即被固定,若需调整大小,必须借助`System.Array.Resize`方法,但这种方法实际上是创建了一个新的数组并复制旧数组的数据,原有的数组则被废弃。此外,数组的元素类型必须在声明时确定,无法存储...

    完整的C++课件以及笔记整理

    7. 标准库:iostream用于输入输出,string处理字符串,vector和array管理动态数组等。 三、源码解析 源码是实践C++编程的最佳途径。通过阅读和理解课件中的示例代码,可以更好地掌握C++的实际应用。例如: 1. 输入...

Global site tag (gtag.js) - Google Analytics