Сравните два массива, получите необычные значения - PullRequest
4 голосов
/ 23 января 2010

У меня есть простая проблема, из-за которой у меня возникают проблемы:

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

Я могу думать только о извилистых методах для каждого, используя вложенные циклы, которые выполняют много избыточных проверок. Может кто-нибудь предложить что-то более чистое? Спасибо.

Ответы [ 3 ]

3 голосов
/ 06 сентября 2010
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);
3 голосов
/ 23 января 2010

Вам нужно несколько циклов, но вы можете оптимизировать их и полностью избежать вложенных циклов, используя объект поиска.

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

0 голосов
/ 23 января 2010

используйте casa lib

главная страница: http://casalib.org/

Документ: 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. согласовать два предыдущих результата

В вашем коде не будет циклов ... Хотя внутри кода класса списка будут циклы: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...