2011-11-15 69 views
2

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

例如(這些是個別跟蹤語句)

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)陣列的最低值。

但我似乎無法弄清楚如何將元素移回到原來的位置。

由於這是賦值,我不能複製整個功能代碼。我希望你不要告訴我確切的答案,而是讓我知道如何去做。

希望我清楚了。如果您需要其他信息,請告訴我。

在此先感謝。


編輯:我意識到我錯過了功能上的一些東西。我也改變了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會改變元素的位置,但我似乎無法弄清楚如何保持其位置的邏輯。請儘量保持簡單。我仍然是一個美麗的人。

+0

RemoveMinValues()中的第二個參數是什麼? – Chris

回答

1

而不是刪除值,將其設置爲null。更好的是,將其設置爲Math.NEGATIVE_INFINITY,以便排序順序保持不變。

這樣一來,數組索引將保持不變,因爲你是修改的價值,而不是刪除

0

首先,請注意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循環搜索的最低或最高值更快。

+0

不錯的想法,沒有想過這樣:) –

+0

Pranav Hosangadi:thanx –

+0

雖然它沒有回答這個問題,'從陣列中移除元素w/o改變位置,但我會保持我的downvote :) –

0

[[編輯]]

添加的代碼爲他人擾流器塊。


如果我正確理解你的問題,你想調查Array.filter。如果你所問的問題要求每個RemoveMinValues通道的最終結果返回一個維持相對位置而不是絕對位置的數組,那麼過濾器方法最好。

下面是給出下面的陣列的差值,假設第二個參數是RemoveMinValues min值,默認爲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(函數(項目:*,...參數):布爾{返回項目> minValue(最小值)});

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

祝你好運!