AS3数组学习

本文详细介绍了数组的各种操作方法,包括查找、插入、删除等基本操作,以及排序、映射、过滤等高级功能。通过实例展示了如何利用这些方法高效地处理数组数据。
indexOf  lastIndexOf

返回索引,查找不到返回-1

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.indexOf("e");
  3. arr.indexOf("b",2); //从第3个元素开始查找
  4. arr.lastIndexOf("b",2); //从第3个元素反向查找
push  unshift

在首尾插入元素,返回增加元素后数组的长度

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.push("h"); //在数组尾部插入元素h
  3. arr.push("i","j","k"); //在数组尾部插入多个元素
  4. arr.unshift("h"); //在数组头部插入元素h
  5. arr.unshift("i","j","k"); //在数组头部插入多个元素
pop  shift

删除首尾元素,返回被删除的元素

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.pop(); //删除尾元素
  3. arr.shift(); //删除首元素 
splice

删除数组一段连续的元素,返回被删除的元素数组

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.splice(删除点的索引,要删除的个数,新元素1,新元素2);
  3. arr.splice(2,3,"o","p","q"); //从索引为2开始,删除3个元素,并插入3个新元素"o","p","q"
  4. arr.splice(-2,3,"o","p","q"); //从倒数为2的索引开始,删除3个元素,并插入3个新元素"o","p","q"
  5. arr.splice(2,3); //单纯的删除从索引2开始的3个元素(不插入)
  6. arr.splice(2); //单纯的删除从索引2开始的所有元素(不插入)
  7. arr.splice(2,0,"x","y","z"); //在索引2的后面插入3个新元素(不删除)
slice

获取数组中的部分元素

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. var newArr:Array = arr.slice(); //浅复制数组
  3. var newArr:Array = arr.slice(2);
  4. var newArr:Array = arr.slice(-2);
  5. var newArr:Array = arr.slice(2,5); 
concat

将多个元素或数组拼接成一个新数组

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. var newArr = arr.concat("x","y","z"); //原数组不变,新数组是原数组拼接后的结果
  3. var newArr = arr.concat(); //浅复制数组 
reverse

将数组倒序排列

  1. var arr:Array = ["a","b","c"];
  2. arr.reverse(); //得到"c","b","a" 
sort

sort() 按默认排序,注意:区分大小写,数字也是按字符串来处理

  1. var arr:Array = ["b","c","a"];
  2. arr.sort(); //得到"a","b","c" arr = ["210","1111","30"];
  3. arr.soft(); //得到"1111","210","30" arr = ["b","X","A","c"];
  4. arr.sort(); //得到"A","X","b","c"
  5. var arr:Array = ["b","C",235,"a",38,"X",8641];
  6. trace(arr.sort()); //得到235,38,8641,C,X,a,b 

◆sort(args) 按参数排序,一共有5种(注意:除了Array.RETURNINDEXEDARRAY,其它方式只要排序成功,都会实际改变数组)

 

        sort(Array.CASEINSENSITIVE) 同sort(),不过不区分大小写,数字也是按字符串来处理
  1. var arr = ["b","X","A","c"];
  2. arr.sort(Array.CASEINSENSITIVE); //得到"A","b","c","X" 
        sort(Array.DESCENDING) 按字符串的倒序排列,区分大小写,数字也是按字符串来处理
  1. var arr:Array = ["b","C","a","X",235,8641,38];
  2. trace(arr.sort(Array.DESCENDING)); //得到b,a,X,C,8641,38,235
        sort(Array.UNIQUESORT) 同sort(),如果数组有相同元素,则放弃排序,返回0
  1. var arr:Array = ["b","C","a","X",235,8641,38,2365];
  2. if(arr.sort(Array.UNIQUESORT)=="0")
  3.     trace("有相同元素");
  4. }
  5. else
  6.     trace("没有相同元素");
  7. }
        sort(Array.RETURNINDEXEDARRAY) 同sort(),返回排序后的索引列表,原数组不变
  1. var arr:Array = ["b","C","a","X",235,8641,38,2365];
  2. trace(arr.sort(Array.RETURNINDEXEDARRAY)); //得到4,7,6,5,1,3,2,0
  3. trace(arr); //得到b,C,a,X,235,8641,38,2365(原数组)
        sort(Array.NUMERIC) 按数字从小到大排序,如果数组里含有非数字,会抛出异常
  1. var arr:Array = [235,8641,38,2365];
  2. trace(arr.sort(Array.NUMERIC)); //得到38,235,2365,8641

◆sort(函数名) 按自定义函数比较,该函数必须接受2个参数,返回值为1、-1、0

  1. public function Sample1008()
  2. {
  3.     var objA:Object = {price:200,quantity:2};
  4.     var objB:Object = {price:400,quantity:4};
  5.     var objC:Object = {price:100,quantity:1};
  6.     var arr:Array = [objA,objB,objC];
  7.     trace("原数组是:");
  8.     for(var i:int=0;i<arr.length;i++)
  9.     {
  10.         trace(arr[i].price);
  11.     }
  12.     arr.sort(Compare);
  13.     trace("排序后的数组是:");
  14.     for(var j:int=0;j<arr.length;j++)
  15.     {
  16.         trace(arr[j].price);
  17.     }
  18. }
  19. private function Compare(paraA:Object,paraB:Object):int
  20. {
  21.     var totalPriceA:int = paraA.price * paraA.quantity;
  22.     var totalPriceB:int = paraB.price * paraB.quantity;
  23.     if(totalPriceA>totalPriceB)
  24.     {
  25.         return 1;
  26.     }
  27.     else if(totalPriceA<totalPriceB)
  28.     {
  29.         return -1;
  30.     }
  31.     else
  32.     {
  33.         return 0;
  34.     }
  35. }
  36. /*运行结果是
  37. 原数组是:
  38. 200
  39. 400
  40. 100
  41. 排序后的数组是:
  42. 100
  43. 200
  44. 400*/
sortOn

常用于对象数组的排序

  1. var obj1:MyClass = new MyClass();
  2. var obj2:MyClass = new MyClass();
  3. var obj3:MyClass = new MyClass();
  4. obj1.orderID = 300;
  5. obj2.orderID = 100;
  6. obj3.orderID = 200;
  7. var arr:Array = [obj1,obj2,obj3];
  8. //trace(arr.sortOn("orderID"));
  9. trace(arr.sortOn("orderID",Array.RETURNINDEXEDARRAY)); //得到索引1,2,0 
every

判断数组里的每个元素是否满足某些条件,只有全部都满足才为true

  1. public function Sample1008()
  2. {
  3.     //必须5个人都满70级,才可以进卡拉赞副本
  4.     var player1:Object = {name:"wayne",level:70};
  5.     var player2:Object = {name:"tom",level:69};
  6.     var player3:Object = {name:"jacky",level:70};
  7.     var player4:Object = {name:"andy",level:68};
  8.     var player5:Object = {name:"bill",level:70};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     if(!playerList.every(CheckLevel))
  12.     {
  13.         trace("队伍中有人等级未到70,无法进入副本");
  14.     }
  15. }
  16. private function CheckLevel(item:*,index:int,arr:Array):Boolean
  17. {
  18.     if(item.level<70)
  19.     {
  20.         //trace(item.name+"等级未到70,无法进入副本");
  21.         return false;
  22.     }
  23.     return true;
  24. }
map

映射器,逐个处理数组中的元素,最后生成一个修改后的新数组(不会更改原数组)

  1. public function Sample1008()
  2. {
  3.     var player1:Object = {name:"wayne",level:70};
  4.     var player2:Object = {name:"tom",level:69};
  5.     var player3:Object = {name:"jacky",level:70};
  6.     var player4:Object = {name:"andy",level:68};
  7.     var player5:Object = {name:"bill",level:70};
  8.     
  9.     var playerList:Array = [player1,player2,player3,player4,player5];
  10.     
  11.     for(var i:int = 0; i<playerList.length; i++)
  12.     {
  13.         trace("player"+(i+1)+"的所有属性是:");
  14.         for(var attr:String in playerList[i])
  15.         {
  16.             trace(attr+":"+playerList[i][attr]);
  17.         }
  18.     }
  19.     
  20.     //为每个玩家添加新属性"声望值"
  21.     var newArray:Array = playerList.map(AddNewAttribute);
  22.     
  23.     trace("-----------------Map后的结果-----------------");
  24.     
  25.     for(var j:int = 0; j<newArray.length; j++)
  26.     {
  27.         trace("player"+(j+1)+"的所有属性是:");
  28.         for(var attr2:String in newArray[j])
  29.         {
  30.             trace(attr2+":"+newArray[j][attr2]);
  31.         }
  32.     }
  33. }
  34. private function AddNewAttribute(item:*,index:int,arr:Array):Object
  35. {
  36.     var tmpPlayer:Object = {};
  37.     tmpPlayer.name = item.name;
  38.     tmpPlayer.level = item.level;
  39.     tmpPlayer.repute = 99;
  40.     return tmpPlayer;
  41. }
some

判断数组里的每个元素是否满足某些条件,只要有一个满足就返回true

  1. public function Sample1008()
  2. {
  3.     //主要队伍里有一个人声望达到140以上,则全队可以进副本
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     if(playerList.some(CheckRepute))
  13.     {
  14.         trace("可以进入副本");
  15.     }
  16.     else
  17.     {
  18.         trace("队伍里没有成员声望达到140,无法进入副本");
  19.     }
  20. }
  21. private function CheckRepute(item:*,index:int,arr:Array):Boolean
  22. {
  23.     if(item.repute>=140)
  24.     {
  25.         return true;
  26.     }
  27.     return false;
  28. }
filter

将数组里满足特定条件的元素提取出来,生成一个新数组

  1. public function Sample1008()
  2. {
  3.     //得到队伍里所有声望达到要求的成员
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     var newArray:Array = playerList.filter(CheckRepute);
  13.     
  14.     for(var i:int=0; i<newArray.length; i++)
  15.     {
  16.         for(var attr:String in newArray[i])
  17.         {
  18.             trace(attr+":"+newArray[i][attr]);
  19.         }
  20.     }
  21. }
  22. private function CheckRepute(item:*,index:int,arr:Array):Boolean
  23. {
  24.     if(item.repute>=140)
  25.     {
  26.         return true;
  27.     }
  28.     return false;
  29. }
forEach

对数组里的元素逐个进行操作,实际改变了数组(不同于map)

  1. public function Sample1008()
  2. {
  3.     //在每个玩家名字前面加上公会名称
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     playerList.forEach(BuildName);
  13.     
  14.     for(var i:int=0; i<playerList.length; i++)
  15.     {
  16.         for(var attr:String in playerList[i])
  17.         {
  18.             trace(attr+":"+playerList[i][attr]);
  19.         }
  20.     }
  21. }
  22. private function BuildName(item:*,index:int,arr:Array):void
  23. {
  24.     item.name = "暗界--"+item.name;
  25. }
### Numpy 数组简介 Numpy 是 Python 编程中最常用的科学计算库之一,主要用于处理数值数据。Numpy 提供了一种高效的多维数组对象 `ndarray` 及其操作方法[^1]。 ```python import numpy as np # 创建一维数组 arr_1d = np.array([1, 2, 3]) print(f"One-dimensional array:\n{arr_1d}") # 创建二维数组 arr_2d = np.array([[1, 2], [3, 4]]) print(f"Two-dimensional array:\n{arr_2d}") ``` ### 基本属性与索引 了解 Numpy 数组的基本属性对于有效利用这些结构至关重要: - 形状 (shape): 表示各维度大小的元组。 - 数据类型 (dtype): 定义了数组元素的数据类型。 - 维度数量 (ndim): 描述数组有多少个轴/维度。 #### 访问元素 通过索引来访问单个或多个元素非常简单直观。 ```python # 获取形状、数据类型以及维度数目 print(f"Shape of arr_2d: {arr_2d.shape}") print(f"Dtype of arr_2d elements: {arr_2d.dtype}") print(f"Number of dimensions in arr_2d: {arr_2d.ndim}") # 索引获取特定位置上的值 element_value = arr_2d[0][1] print(f"The element at position (0, 1) is {element_value}.") ``` ### 构建不同类型的数组 除了手动定义外,还可以使用多种方式快速构建具有特殊性质的数组。 #### 特殊数组创建函数 | 函数名 | 功能描述 | | --- | --- | | zeros | 创建全零填充的数组 | | ones | 创建全部为1的数组 | | full | 使用给定填充值创建新数组 | | arange | 类似于内置 range(), 返回等差序列 | | eye / identity | 单位矩阵 | ```python zero_arr = np.zeros((2, 3)) one_arr = np.ones((2, 2)) full_arr = np.full((2, 2), fill_value=7) aranged_seq = np.arange(start=0, stop=10, step=2) identity_mat = np.eye(N=3) for name, var in locals().items(): if isinstance(var, np.ndarray): print(f"{name}: \n{var}\n") ``` ### 进阶特性 当涉及到更复杂的场景时,掌握一些高级功能可以帮助更好地管理和分析大量数据集。 #### 广播机制 广播允许不同尺寸的两个数组之间执行算术运算或其他操作而无需显式复制它们的内容。 ```python scalar_addition = one_arr + 5 broadcasted_multiplication = scalar_addition * [[1],[2]] print(scalar_addition) print(broadcasted_multiplication) ``` #### 向量化表达式 向量化的代码通常比基于循环实现更加简洁高效,并且易于阅读理解。 ```python vectorized_operation = np.sqrt(np.abs(aranged_seq)) ** 2 print(vectorized_operation) ``` #### 高效查找表映射 针对含有有限非负整数作为键的情况,可以通过预先准备好的查找表来加速转换过程。 ```python mapping_table = np.array([&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;]) source_array = np.array([0, 1, 2]) mapped_result = mapping_table[source_array] print(mapped_result) ``` ### 学习资源推荐 为了深入理解和熟练运用 Numpy 库的功能,建议参考官方文档和其他优质的学习资料。这里列举了一些值得探索的地方: - [Numpy 官方网站](https://numpy.org/doc/stable/) - Coursera 上开设的相关课程 - GitHub 上开源项目中的实际应用案例研究
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值