什麼是在ActionScript中合併兩個排序數組的好方法(特別是ActionScript 3.0)?結果數組應該排序並且沒有重複。在ActionScript(3.0)中乾淨地合併兩個數組?
16
A
回答
25
要合併(連接)數組,請使用.concat()
。
下面是如何連接數組並同時刪除重複項的兩個示例。
更方便的方法:(你可以使用ArrayUtil.createUniqueCopy()
從as3corelib)
// from as3corelib:
import com.adobe.utils.ArrayUtil;
var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];
var c:Array = ArrayUtil.createUniqueCopy(a1.concat(a2)); // result: ["a", "b", "c", "x", "y"]
稍快的方式:(您可以通過數組循環自己,用Array.indexOf()
檢查重複)
var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];
var a3:Array = ["a", "x", "x", "y", "z"];
var c:Array = arrConcatUnique(a1, a2, a3); // result: ["a", "b", "c", "x", "y", "z"]
private function arrConcatUnique(...args):Array
{
var retArr:Array = new Array();
for each (var arg:* in args)
{
if (arg is Array)
{
for each (var value:* in arg)
{
if (retArr.indexOf(value) == -1)
retArr.push(value);
}
}
}
return retArr;
}
4
這是一種簡單的算法來編寫。如果在Actionscript中有更直接的方法來做到這一點,我會感到驚訝。
function merge(a1:Array, a2:Array):Array {
var result:Array = [];
var i1:int = 0, i2:int = 0;
while (i1 < a1.length && i2 < a2.length) {
if (a1[i1] < a2[i2]) {
result.push(a1[i1]);
i1++;
} else if (a2[i2] < a1[i1]) {
result.push(a2[i2]);
i2++;
} else {
result.push(a1[i1]);
i1++;
i2++;
}
}
while (i1 < a1.length) result.push(a1[i1++]);
while (i2 < a2.length) result.push(a2[i2++]);
return result;
}
2
function remDuplicates(_array:Array):void{
for (var i:int = 0; i < _array.length;++i) {
var index:int = _array.indexOf(_array[i]);
if (index != -1 && index != i) {
_array.splice(i--, 1);
}
}
}
那麼對於 「合併」 使用CONCAT。 爲例:
var testArray:Array = [1, 1, 1, 5, 4, 5, 5, 4, 7, 2, 3, 3, 6, 5, 8, 5, 4, 2, 4, 5, 1, 2, 3, 65, 5, 5, 5, 5, 8, 4, 7];
var testArray2:Array = [1, 1, 1, 5, 4, 5, 5, 4, 7, 2, 3, 3, 6, 5, 8, 5, 4, 2, 4, 5, 1, 2, 3, 65, 5, 5, 5, 5, 8, 4, 7];
testArray.concat(testArray2);
trace(testArray);
remDuplicates(testArray);
trace(testArray);
3
使用Array.indexOf檢測重複是怎麼回事,如果你有一個包含大量元素的清單是非常慢的;刪除duplciates的更快的方法是在將它們連接起來後將數組的內容放入Set中。
// Combine the two Arrays.
const combined : Array = a.concat(b);
// Convert them to a Set; this will knock out all duplicates.
const set : Object = {}; // use a Dictionary if combined contains complex types.
const len : uint = combined.length;
for (var i : uint = 0; i < len; i++) {
set[combined[i]] = true;
}
// Extract all values from the Set to produce the final result.
const result : Array = [];
for (var prop : * in set) {
result.push[prop];
}
如果你的程序使用了大量的館藏那麼如果可以謹慎地使許多AS3收藏之一的使用框架存在其用於操縱數據提供了一個簡單的界面,當它始終以最佳方法來實現。
0
請按照下面的步驟讓你的答案:
- 的毗連×2個陣列使用 「的毗連」 Methos。
- 新陣列(concated)排序使用「排序」方法,該方法在陣列級提供爲API
- 製作用戶定義函數來刪除重複(見下文函數)
- >功能removeDuplicates(p_arr:陣列):數組{
var ansArr:Array = new Array(); var len:uint = p_arr.length; var i:uint = 0; var j:uint = 0; ansArr[j] = p_arr[i]; i++; j++; while(i<len) { if(ansArr[j] != p_arr[i]) { ansArr[j] = p_arr[i]; j++; } i++; } return ansArr;
}
退換 「ansArr」 進行排序,並無需兩臺陣列的複製合併後的數組。
相關問題
- 1. 在Numpy中合併兩個相同形狀數組的最乾淨的方法
- 2. 如何幹淨地遍歷兩個文件並行在Python
- 3. ActionScript 3.0中 - 併發
- 4. 在nodejs中合併兩個數組
- 5. 在Javascript中合併兩個數組
- 6. 合併兩個數組
- 7. 合併兩個數組Matlab
- 8. php合併兩個數組
- 9. 合併兩個numpy數組
- 10. 合併兩個數組只
- 11. 合併兩個數組
- 12. git拉乾淨本地回購導致合併提交
- 13. 如何從函數到函數乾淨地傳遞參數(如組合)
- 14. 乾淨地在Perl中捕獲信號
- 15. 合併兩個數組中的R
- 16. 組合兩個數據集,並在Matlab
- 17. 在numpy下合併兩個數組
- 18. 合併兩個數組,但在javascript
- 19. 合併兩個數組在PHP
- 20. 將兩個數組合並在一起
- 21. 合併\組合兩個數據表
- 22. .htaccess帶兩個變量的乾淨url
- 23. 合併兩個數組和短合併數組
- 24. 在乾淨的MVP中,誰應該處理組合交互者?
- 25. 合併兩個數組並顯示在一個表中
- 26. 合併兩個數組中的一個數組(元素需要太多合併)
- 27. 如何在AngularJS中乾淨地構建組件/結構邏輯
- 28. Ember transitionTo在沒有sendAction的組件中乾淨地行駛
- 29. 乾淨地排隊輸出
- 30. 乾淨地處理事件
他問了一個'很好'的方式......:) – Luke 2008-12-03 05:02:23
好吧,也許我添加到答案的其他方式可以被認爲是'更好' – hasseg 2008-12-04 17:04:59