Apache flex Flex:设置两个数组集合的差异

Apache flex Flex:设置两个数组集合的差异,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我正在搜索与数组集合相交的方法 我有一个集合:allItems和另一个子集。我想创建另一个ArrayCollection,其中将存储子集中不存在的所有项。有什么方法可以做到这一点吗?要获得一个不在另一个项目中的项目集合,您需要一个算法(allItems减去子集) 为了获得一个不在另一个项目中的项目集合,您需要一个算法(allItems减去子集) var allLength:Number=allItems.length; 变量交集:ArrayCollection=新的ArrayCollection

我正在搜索与数组集合相交的方法


我有一个集合:allItems和另一个子集。我想创建另一个ArrayCollection,其中将存储子集中不存在的所有项。有什么方法可以做到这一点吗?

要获得一个不在另一个项目中的项目集合,您需要一个算法(allItems减去子集)


为了获得一个不在另一个项目中的项目集合,您需要一个算法(allItems减去子集)

var allLength:Number=allItems.length;
变量交集:ArrayCollection=新的ArrayCollection();
对于(变量i:Number=0;i
请注意,仅当子集包含与超集相同的对象时,此操作才有效。如果子集包含与超集对象具有相同属性值的不同对象,则必须分别比较它们的属性。

var allLength:Number=allItems.length;
变量交集:ArrayCollection=新的ArrayCollection();
对于(变量i:Number=0;i

请注意,仅当子集包含与超集相同的对象时,此操作才有效。如果子集包含与超集对象具有相同属性值的不同对象,则必须分别比较它们的属性。

eemeli提供的工作答案。。。这里是一个针对速度(阵列访问而不是调用)和可伸缩性(方法提供O(m+n)而不是O(m*n))优化的替代实现


eemeli提供的工作答案。。。这里是一个针对速度(阵列访问而不是调用)和可伸缩性(方法提供O(m+n)而不是O(m*n))优化的替代实现


ArrayCollection
中是否有
add
方法?不应该是
addItem
?关于差异和itersection:让A和B是两组。。。当且仅当A为空时,A和B的交点等于A减去B。。。如果B是a的子集,那么它们的交集是B,a减B是B相对于a的补码…对,我的错。完全删除了错误句子:)原始问题的标题令人困惑。在
ArrayCollection
中是否有
add
方法?不应该是
addItem
?关于差异和itersection:让A和B是两组。。。当且仅当A为空时,A和B的交点等于A减去B。。。如果B是a的子集,那么它们的交集是B,a减B是B相对于a的补码…对,我的错。删除了erroneus的句子:)原来问题的标题令人困惑。问题的标题具有误导性,-1。你要的是集合差分,而不是交集。问题标题有误导性,-1。您要求的是设定差,而不是交点。
public function minus(a:ArrayCollection, b:ArrayCollection):ArrayCollection {
    var result:ArrayCollection = new ArrayCollection()

    for each (i in a) {
        if (!b.contains(i)) {
            result.addItem(i)
        }
    }

    return result
}
var allLength:Number = allItems.length;
var intersection:ArrayCollection = new ArrayCollection();
for(var i:Number = 0; i < allLength; i++)
  if(subSet.getItemIndex(allItems.getItemAt(i)) == -1)
    intersection.addItem(allItems.getItemAt(i));
public static function difference(a:ArrayCollection, b:ArrayCollection):ArrayCollection {
    var entry:*, map:Dictionary = new Dictionary(), intersection:Array = [];
    for each (entry in a.source) map[entry] = entry;
    for each (entry in b.source) delete map[entry];
    for each (entry in map) intersection.push(entry);
    return new ArrayCollection(intersection);
}