我有一个简单的问题,我无法思考:
var oldValues : Array = [ 4, 5, 6 ];
var newValues : Array = [ 3, 4, 6, 7 ];
我只能通过使用执行大量冗余检查的嵌套循环来考虑每个方法的复杂方法。有人可以建议更干净的东西?感谢。
答案 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
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
克隆列表,并使用newValues.removeItems(oldValues)从newValues中获取不在oldValue中的值
然后使用相同的方法从oldValues中获取不在newValue中的值
联合前两个结果
你的代码中没有循环...虽然列表类的代码中会有循环:D