簡體   English   中英

AS3從陣列中移除元素而無需更改位置

[英]AS3 Removing Elements from Array w/o Changing Position

我想編寫一個函數,該函數從最低值開始的整數數組中刪除元素,而無需更改元素的位置。 編程語言是ActionScript3。

例如(這些是單獨的跟蹤語句)

    var aNumArr:Array = [0,7,2,5,9,0]
    trace(RemoveMinValues(aNumArr, 1, false)) //output: 7,2,5,9,0
    //trace(RemoveMinValues(aNumArr, -1, true)) //output: 0,7,2,5,9
    //trace(RemoveMinValues(aNumArr, 2)) //output: 7,2,5,9

我設法使用sort(Array.NUMERIC)sort(Array.DESCENDING)刪除了數組中的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();
              }
         }
    }

基本上, aNumArr:Array是指定整數的數組。 iNumbersOfMinsToRemove:int是要刪除的最小值的數量。 作業要求我不退還任何東西

我知道Array.NUMERIC和Array.DESCENDING會更改元素的位置,但是我似乎無法弄清楚如何保持其位置的邏輯。 請盡量保持簡單。 我仍然保持樂觀。

無需刪除該值,而是將其設置為null 更好的是,將其設置為Math.NEGATIVE_INFINITY ,以使排序順序保持不變。

這樣,數組索引將保持不變,因為您正在修改值,而不是刪除

首先,請注意Math.min()和Math.max()可以接受任意數量的參數。 同樣,了解Function對象可用的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循環搜索最小值或最大值要快。

[[編輯]]

將代碼添加到其他代碼的擾流塊中。


如果我正確理解了您的問題,則希望調查Array.filter 如果您要提出的問題要求每個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的以下方法實現將提供“相對”結果。 請花一些時間閱讀Array.filter文檔。 使用此特定實現,對RemoveMinValues的每次調用都會返回一個新數組,而不修改原始數組,如文檔中所定義。

碼:

target.filter(function(item:*,... args):Boolean {返回項目> minValue});

在較大的數據集上,此方法將較慢。 切換到Vector對象將解決性能問題。

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM