2009-08-14 21 views
1

我已經克服了一個問題,但是我的解決方案看起來確實效率低下且笨拙。請考慮這樣的問題:使用Flex高效拼接來自陣列的項目

我有文章的陣列收集

該陣列收集過濾到目前所選擇文章類別。

有一個光標綁定到顯示當前文章的視圖。

當一個類被刪除我需要刪除orphened文章,我不能使用光標或集合,而不影響的看法,因爲他們的約束。

我可以itterate在源,但是使用每個甚至當,如果我刪除我必須打破並重新啓動源(拼接),因爲所有指標改變的文章。

這似乎是一種非常低效的做事方式,我相信有更好的方法來做到這一點,通過在同一個來源上使用另一個itterator,或者我已經完成更新等unlatding視圖。

請讓我知道,如果我缺少一個把戲,因爲我敢肯定,這是一個很常見的問題/問題。

感謝

羅布

附:寫在我的iPhone上。對不起,有任何錯誤!

回答

1

向後運行循環。

因此,而不是,說:

var len:int = arr.length; 
for(var i:int = 0; i < len; i++) { 
    if(some condition) { 
     arr.splice(i,1); 
    } 
} 

做到這一點:

for(var i:int = arr.length - 1; i >= 0; i--) { 
    if(some condition) { 
     arr.splice(i,1); 
    } 
} 
+0

傻微優化:幾個做一個預遞減,而不是一個職位毫秒的提升 – grapefrukt 2009-08-17 09:25:38

+0

現在看起來很明顯......謝謝! – robmcm 2009-08-17 15:40:27

0

最簡單的解決方案可能只是將您需要刪除的索引保存在臨時數組中。然後,在遍歷集合之後,返回並刪除臨時數組中的項目。

但是,從我所知,你應該使用哈希(對象)或東西,而不是一個陣列結構。

+0

我試過了,但只要你刪除一個項目(拼接)其它指標不再是正確的! – robmcm 2009-08-14 19:58:13

+0

排序索引,從最後刪除。再次考慮使用不同的數據結構。 – CookieOfFortune 2009-08-14 21:48:11

+0

只是一個簡單的問題,你能告訴我如何使用對象的例子,以及如何你可以使用類似的一個數組集合(或實施iViewCollection) – robmcm 2009-08-17 15:41:32