Разумный способ сравнения xml-содержимого 2 векторов или массивов - PullRequest
0 голосов
/ 06 марта 2012

Код:

    var v0:Vector.<XML> = Vector.<XML>([new XML(<a/>)]);
    var v1:Vector.<XML> = Vector.<XML>([new XML(<a/>)]);
    trace(v0 == v1); //false
    trace(ObjectUtil.compare(v0, v1) == 0); //stupid always true

    //insane, but seems to work
    var same:Boolean = true;
    var found:Boolean;
    for each (var item0:XML in v0){
        found = false;
        for each (var item1:XML in v1){
            if (item0 == item1){
                found = true;
                break;
            }
        }
        if (found != true){
            same = false;
            break;
        }
    }
    trace(same);

Если вы замените вектор на массив, вы получите те же следы.Что странно в этом, так это то, что ObjectUtil будет по-прежнему возвращать true, если элементы в массиве различны.

Безумный метод - только 1/2 безумного, потому что он определяет, все ли элементы v0содержится в v1.Часть 2/2 должна будет проверить, все ли элементы v1 находятся в v0 ...

Особенности ObjectUtil с массивами и векторами xml:

    var arr0:Array = ['a'], arr1:Array = ['a'];
    trace(ObjectUtil.compare(arr0, arr1) == 0); // true
    arr1 = ['b'];
    trace(ObjectUtil.compare(arr0, arr1) == 0); //false
    arr0 = [new XML(<a/>)];
    arr1 = [new XML(<a/>)];
    trace(ObjectUtil.compare(arr0, arr1) == 0); // true
    arr1 = [new XML(<b/>)];
    trace(ObjectUtil.compare(arr0, arr1) == 0); //!!! true

Что это проверяет в последнем случае?2 разных объекта с разными значениями, заканчивающимися как true ...?

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