2012-06-02 35 views
0

我想合併2陣列集合,其中沒有允許重複,如何合併兩個arraycollection而沒有重複?

var ac1:ArrayCollection = new ArrayCollection([ {s:"4",e:"8"}, {s:"9",e:"10"}, ]); 
var ac2:ArrayCollection = new ArrayCollection([ {s:"2",e:"3"}, {s:"4",e:"8"}, {s:"9",e:"10"}, {s:"11",e:"12"}, ]); 

我怎麼能做到這一點的有效方式

感謝,

+0

這雖然不是一個困難的問題。你嘗試了什麼? –

回答

0

也許這是一個很好的先發。

function equals(o1:Object, o2:Object) 
{ 
    return (o1 && o2) && (o1 != o2) && (o1.s != o2.s) && (o1.e != o2.e); 
} 

function merge(a:Array, b:Array):Array 
{ 
    const source = []; 
    var isContained:Boolean = false; 
    for (var i:int; i< a.length;i++) { 
     isContained = false 
     for (var j:int; j< b.length;j++) { 
      if (equals(a[i], b[j])) { 
       isContained = true; 
       break; 
      } 
     } 
     if (!isContained) { 
      source.push(a[1]); 
     } 
    } 
    return source.concat(b); 
} 
+0

謝謝,如果我在對象中有10個屬性(例如,s,e,name,destin等) ,我是否需要比較所有屬性! – flex

1

Errr,我不是一個動作的人,但這是一個典型的問題 - 按升序對兩個數組進行排序,然後將它們饋送到第三個數組中,總是從兩個源數組中選擇最小值,並且如果寫入的內容已經位於列表 - 您將最終得到n個輸入數組中唯一值的排序列表

+0

總是從兩個源數組中選擇最低值,如果要寫入的內容已經在列表的末尾,則轉義寫入到目標 - 最後,您將得到n個輸入數組中唯一值的排序列表?無法得到這一點。你可以舉一個例子 – flex

+0

對兩個數組進行排序 - 然後創建一個新的empy數組,然後進入一段時間(或者排序後的數組不是空的){找到哪個排序後的數組具有最低值,接受它並且爲該數組提前指針 - 如果你選擇的值不在你正在填充的數組的末尾,那麼將它添加到最後} –

1

更多的屬性,使用類似:

function equals(o1:Object, o2:Object):Boolean 
{ 
    if (o1 == o2) return true; 
    if (!o1 || !o2) return false; 

    for (var key:String in o1) 
    { 
     if (!(key in o2)) return false; 
     if (o1[key] != o2[key]) return false; 
    } 

    return true; 
} 
相關問題