Flash as3 如何删除数组中的重复项?

标签 flash actionscript-3 actionscript

嗨,我在闪存中只有一个名称(字符串)数组,我想确保删除数组中的任何重复项,或者至少每个数组中的重复值只执行一次函数。

最佳答案

很多方法。您可以对数组进行排序并对其进行迭代,忽略与前一次迭代匹配的条目。或者您可以使用 indexOf() 来搜索重复项。或者您可以遍历数组,构建一个以字符串为键的字典(并忽略已经有条目的键)。

这是字典方式,每个唯一条目的内存成本为 1 个 bool 值,当您期望有很多欺骗时,内存很容易,而且速度很快。如果您的欺骗对象相对较少,则对连续欺骗对象的排序 + 剔除可能更有效

import flash.utils.Dictionary;

var array:Array = ["harry","potter","ron","harry","snape","ginny","ron"];
var dict:Dictionary = new Dictionary();

for (var i:int = array.length-1; i>=0; --i)
{
    var str:String = array[i] as String;
    trace(str);
    if (!dict[str])
    {
        dict[str] = true;
    }
    else
    {
        array.splice(i,1);
    }
}

dict = null;


trace(array);

这是一种排序方式,但请注意:这不保留顺序!你没有说这是否重要。但是因为它使用快速排序,所以它的性能往往是 O(N log N) 加上一次额外的传递,当然除非你的数据是病态的。
var array:Array = ["harry","potter","ron","harry","ron","snape","ginny","ron"];

array.sort();
trace(array);

for (var i:int = array.length-1; i>0; --i)
{
    if (array[i]===array[i-1])
    {
        array.splice(i,1);
    }
}


trace(array);

除了没有指定顺序是否重要之外,您还没有说明留下哪个欺骗者是否重要:索引最低的那个,还是找到的最后一个。如果这很重要,您将需要重新排序我的字典示例以在相反的方向运行。我从最后开始,因为这样可以在不使循环计数无效的情况下进行拼接(即通过在循环期间更改 array.length)如果顺序很重要,则以通常的正向循环并复制出每个字符串的第一次出现到一个新数组,或者像这样修改循环计数器。这可能是我会使用的技术,因为它保留了顺序并保留了每个字符串的第一个遇到的实例:
import flash.utils.Dictionary;

var array:Array = ["harry","potter","ron","harry","snape","ginny","ron"];
var dict:Dictionary = new Dictionary();

var len:int = array.length;
for (var i:int = 0; i<len; ++i)
{
    var str:String = array[i] as String;
    if (!dict[str])
    {
        dict[str] = true;
    }
    else
    {
        array.splice(i,1);
        i--; len--;
    }
}

dict = null;


trace(array);

关于Flash as3 如何删除数组中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997822/

相关文章:

actionscript-3 - 在 Flash 中触发帧更新

flash - 如何在 AS3 中播放库中的声音?

android - 如何将 Flash builder 项目作为库包含在 android Studio 中?

actionscript - 使用 ActionScript 文件编译 .SWF

javascript - 火狐 "Exited full-screen because windowed plugin was focused"

flash - 我应该使用哪种 Flash 3D 框架?

css - 尝试在 SWF 文件上使用 CSS top 属性,但它不起作用

ios - 设置加载器类的 z-index

actionscript-3 - 在 Flex 3 的 TileList 中移动效果

apache-flex - 如何检测 Flex 应用程序是否失去焦点