Arrays AS3从阵列中移除元素,不改变位置

Arrays AS3从阵列中移除元素,不改变位置,arrays,actionscript-3,function,flash-cs5,Arrays,Actionscript 3,Function,Flash Cs5,我想写一个函数,它从整数数组中移除元素,从最小值开始,而不改变元素的位置。编程语言是ActionScript3 e、 g.(这些是单独的跟踪语句) 我已经使用sort(array.NUMERIC)和sort(array.DESCENDING)删除了数组中的最低值 但我似乎不知道如何将元素移回它们原来的位置 由于这是一个分配,我无法复制整个功能代码。我希望你不要告诉我确切的答案,而是告诉我如何去做 希望我说得够清楚。如果您需要更多信息,请告诉我 提前谢谢 编辑:我意识到我错过了一些功能。我还更改

我想写一个函数,它从整数数组中移除元素,从最小值开始,而不改变元素的位置。编程语言是ActionScript3

e、 g.(这些是单独的跟踪语句)

我已经使用
sort(array.NUMERIC)
sort(array.DESCENDING)
删除了数组中的最低值

但我似乎不知道如何将元素移回它们原来的位置

由于这是一个分配,我无法复制整个功能代码。我希望你不要告诉我确切的答案,而是告诉我如何去做

希望我说得够清楚。如果您需要更多信息,请告诉我

提前谢谢


编辑:我意识到我错过了一些功能。我还更改了
aNumArr
和所需的输出值,以便更清楚地了解我想要什么

以下是我之前所做的:

    function RemoveMinValues(aNumArr:Array, iMinsToRemove:int):void
    {
         if(iMinsToRemove >= 0)
         {
              aNumArr.sort(Array.NUMERIC);
              for(var i:int = 0; i < iMinsToRemove; ++i)
              {
                   aNumArr.shift();
              }
         }
         else
         {
              aNumArr.sort(Array.DESCENDING);
              for(var i:int = 0; i > iMinsToRemove; --i)
              {
                   aNumArr.pop();
              }
         }
    }
函数RemoveMinValues(anumar:Array,iMinsToRemove:int):void
{
如果(iMinsToRemove>=0)
{
aNumArr.sort(Array.NUMERIC);
对于(变量i:int=0;iiMinsToRemove;--i)
{
Anumar.pop();
}
}
}
基本上,
anumar:Array
是指定的整数数组。 和
iNumbersOfMinsToRemove:int
是要删除的最小值的数目。 作业要求我不返回任何内容


我知道Array.NUMERIC和Array.DESCENDING会改变元素的位置,但我似乎无法理解如何保持它们的位置。请尽量保持一个简单的答案。我仍然是一个ameture。

不是删除该值,而是将其设置为
null
。更好的是,将其设置为
Math.NEGATIVE_∞
,以便排序顺序保持不变

这样,数组索引将保持不变,因为您正在修改值,而不是首先删除它。请注意,Math.min()和Math.max()可以接受任意数量的参数。此外,了解函数对象可用的apply()方法也很重要。它允许您使用数组向函数传递参数。让我们利用这两个优势:

var aNumArr:Array = [0,7,2,5,9];
var maxValue:Number = Math.max.apply(null, aNumArr);
var minValue:Number = Math.min.apply(null, aNumArr);
这里是最好的部分:“循环”实际上是使用本机代码(在Flash Player中)运行的,因此它比使用纯ActionScript循环搜索最小值或最大值要快。

[[Edit]]

为其他人将代码添加到扰流板块


如果我正确理解你的问题,你希望调查。如果您要问的问题要求每次RemoveMinValues传递的最终结果返回一个保持相对位置而不是绝对位置的数组,那么filter方法的效果最好

以下是给定以下数组的差异,假设RemoveMinValues的第二个参数是最小值,默认为0

var arr:Array = [-1,3,2,1,0];
绝对位置:

RemoveMinValues(arr)    // [null,3,2,1,null]
RemoveMinValues(arr, 1) // [null,3,2,null,null]
RemoveMinValues(arr)    // [3,2,1]
RemoveMinValues(arr, 1) // [3,2]
相对位置:

RemoveMinValues(arr)    // [null,3,2,1,null]
RemoveMinValues(arr, 1) // [null,3,2,null,null]
RemoveMinValues(arr)    // [3,2,1]
RemoveMinValues(arr, 1) // [3,2]
以下RemoveMinValues的方法实现将提供“相对”结果。请花些时间阅读文档。按照文档中的定义,使用此特定实现对RemoveMinValues的每次调用都会返回一个新数组,而不修改原始数组

代码:

filter(函数(项:……args):布尔值{returnitem>minValue})

在较大的数据集上,此方法速度较慢。切换到矢量对象将解决性能问题


祝你好运

不错的想法,没有这样想过:)虽然它没有回答这个问题,
从数组中移除元素而不改变位置,但我将保留我的否决票:)RemoveMinValues()中的第二个参数是什么?