在AS3里面,我们用的最多的容器就是Array和Vector了,作为一个容器,我们有一个最重要的一个功能就是需要清空。我们常用的方法就是:
array = [];
这个方法看起来挺简单,简洁,对不?
但考虑你有一段循环,需要每次循环都要获得一个空的容器,而且上次的计算结果不需要保留。如果使用这个方法的话,循环N次,就会产生N个需要被垃圾回收的数组。我们知道,AVM进行垃圾回收是有性能代价的,反复的new和置空的代价更是,那么我们有没有一个新的方法来清空一个现有的容器而不需要丢掉它呢。我们会想到使用容器的splice方法,可以使用如下:
array.splice(0,array.length);
但是这个代码看起来有点不直观,而且敲的键盘量有点多。我们也有另外一个替代方法,就是:
vector = vector.filter(
function(obj:Object, idx:int, vector:Vector.<Object>): Boolean{
return false;
}
);
但是这个方法效率比上面两种慢多了去了,完全不实用,那么有没有一种最好的方法呢?
答案是有的!!!
Ta da~~~~
array.length = 0;
神马?????length居然是可写的??
哈哈,震精了吧,看看array的API吧。
引用
指定数组中元素数量的非负整数。在向数组中添加新元素时,此属性会自动更新。当您给数组元素赋值(例如,my_array[index] = value)时,如果 index 是数字,而且 index+1 大于 length 属性,则 length 属性会更新为 index+1。
注意:如果您为 length 属性所赋的值小于现有长度,会将数组截断。
以上的方法翻译并转载自:http://jacksondunstan.com/articles/702
哈哈,这样就真相大白了吧!
分享到:
相关推荐
首先,让我们看一个简单的例子,其中包含一个错误的清空数组的方法: ```javascript var aa = new Array(); aa.push("hello"); aa.push("good"); aa.length = 0; // 错误的清空方式 ``` 在这个例子中,虽然我们...
1. **创建VI**:打开LabVIEW,创建一个新的虚拟仪器(VI),并拖拽一个一维数组控件到前面板上,作为输入数据。同时,添加另一个一维数组控件作为输出,表示处理后的无0值数组。 2. **建立数据流**:在程序框图上,...
在JavaScript中,清空数组是一个常见的需求,尤其是在处理动态数据或需要重置数组状态时。本文将介绍三种不同的方法来清空JavaScript中的数组,并对它们的使用场景、特点和效率进行分析。 第一种方法是使用splice...
在JavaScript中,清空数组是一个常见的操作,可以有多种方式实现。本文讨论了两种常用的方法,并对比它们的优缺点。 首先,来看看JavaScript中常见的几种清空数组的方法: 1. `arr = [];` — 直接将变量`arr`重新...
在清空数组时,我们可以设置第一个参数为0,第二个参数为数组长度,这样会删除数组从索引0开始的所有元素,从而达到清空数组的效果。示例如下: ```javascript var ary = [1,2,3,4]; ary.splice(0,ary.length); ...
8. **重置或继续游戏**:游戏结束后,可能需要提供选项让玩家重新开始游戏,这就需要清空棋盘(数组初始化)或重新创建新的棋盘。 通过这些知识点,我们可以构建一个简单的命令行五子棋游戏,虽然没有图形界面,但...
一些开发者可能会尝试通过 `a = []` 来清空数组,即创建一个新的空数组,并让变量a指向这个新数组的引用。这样做的结果是,虽然a现在指向了一个空数组,但是原先数组的引用地址并没有被释放,如果还有其他变量(比如...
清空数组只需将`length`设为0,而截短数组则将其设置为小于当前长度的新值。这种方式不会改变数组引用,只影响其内部的元素。在处理大量数据或需要快速调整数组大小的场景下,这种技术尤为实用。
`Clear()` 方法用于清空数组,使数组长度变为0: ```javascript arr.Clear(); // 数组现在为空 ``` `Reverse()` 方法会反转数组中的元素顺序: ```javascript arr.Reverse(); // 数组元素顺序颠倒 ``` `Sort()` ...
当我们将 splice 方法的第一个参数设置为 0,第二个参数设置为当前数组的长度时,即可删除数组中的所有元素,从而清空数组。这种做法的效果等同于删除了数组的所有元素,但数组的引用本身没有被改变,只是元素被清空...
如果表满,可以考虑复制现有数组到一个更大的新数组(通常扩大一倍),然后在新数组的末尾插入元素。插入操作的时间复杂度在最坏情况下为O(n),因为可能需要移动大量元素。 **判断顺序表是否为空**:只需检查当前...
当数组满时,我们可以通过创建一个更大的数组并将现有元素复制到新数组中来扩展它。此外,还需要一个指针来跟踪链表的头元素,因为数组可能无法连续存储所有元素。 在`alist.h`头文件中,我们可以定义以下结构体和...
- `ios::trunc`:打开一个文件并清空其内容。 - `ios::ate`:打开一个文件并将位置设置到文件的末尾。 #### 文件指针操作 文件指针的位置可以使用以下几种方式调整: - `ios::beg`:将指针定位到文件的开头。 - `...
数组还支持一些内置的方法,如`CopyTo()`用于复制数组内容,`Sort()`对数组进行排序,以及`Clear()`清空数组元素。 字符串在.NET中被实现为不可变的对象,这意味着一旦创建,就不能更改其内容。字符串是`System....
例如,数组的第一个元素是顺序表的第一个元素,第二个元素是顺序表的第二个元素,以此类推。这种结构使得我们能够通过下标直接访问任意位置的元素,时间复杂度为O(1)。 顺序表的基本操作包括插入、删除、查找等。在...
例如,一个方块在旋转90度时,原数组的(i, j)位置的元素会变为新数组的(j, -i)位置(对于左上角为原点的坐标系)。这避免了针对每种方块类型和旋转方向的单独处理。 4. **碰撞检测**:二维数组可以方便地进行边界...
`ArrayList` 是一个对象数组,可以存储任何类型的对象,并且提供了许多用于添加、删除、插入和检索元素的方法。下面我们将详细介绍 `ArrayList` 的一些关键特性和用法。 #### 创建 ArrayList ```csharp ArrayList ...
本文将详细介绍如何使用C++通过数组实现队列,并提供一个简单的示例程序。 #### 队列的基本概念 队列是一种线性数据结构,与栈不同的是,队列中的元素按照它们加入队列的顺序进行操作。队列有两个主要的操作:入队...