比较两个阵列,获取不常见的值

时间:2010-01-23 03:38:24

标签: arrays actionscript-3 comparison

我有一个简单的问题,我无法思考:

var oldValues : Array = [ 4, 5, 6 ];
var newValues : Array = [ 3, 4, 6, 7 ];
  1. 我想从newValues获取不在oldValues中的值 - 3,7
  2. 我想从oldValues获取不在newValues中的值 - 5
  3. 将两组价值放在一起的方法也很不错 - 3,5,7
  4. 我只能通过使用执行大量冗余检查的嵌套循环来考虑每个方法的复杂方法。有人可以建议更干净的东西?感谢。

3 个答案:

答案 0 :(得分:3)

你需要一堆循环,但是你可以通过使用查找对象来优化它们并完全避免嵌套循环。

var oldValues : Array = [ 4, 5, 6 ];
var newValues : Array = [ 3, 4, 6, 7 ];

var oldNotInNew:Array = new Array();
var newNotInOld:Array = new Array();

var oldLookup:Object = new Object();

var i:int;

for each(i in oldValues) {
    oldLookup[i] = true;
}       

for each(i in newValues) {
    if (oldLookup[i]) {
        delete oldLookup[i];
    }
    else {
        newNotInOld.push(i);
    }
}

for(var k:String in oldLookup) {
    oldNotInNew.push(parseInt(k));
}

trace("Old not in new: " + oldNotInNew);
trace("new not in old: " + newNotInOld);

结果:

  

旧的不是新的:5

     

新的不旧:3,7

答案 1 :(得分:3)

var difference : Array = new Array();
var i : int;
for (i = 0; i < newValues.length; i++)
    if (oldValues.indexOf(newValues[i]) == -1)
        difference.push(newValues[i])
trace(difference);

答案 2 :(得分:0)

使用casa lib

主页:http://casalib.org/

doc:http://as3.casalib.org/docs/

列出课程:http://as3.casalib.org/docs/org_casalib_collection_List.html

removeItems http://as3.casalib.org/docs/org_casalib_collection_List.html#removeItems

  1. 克隆列表,并使用newValues.removeItems(oldValues)从newValues中获取不在oldValue中的值

  2. 然后使用相同的方法从oldValues中获取不在newValue中的值

  3. 联合前两个结果

  4. 你的代码中没有循环...虽然列表类的代码中会有循环:D