Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   as1, сравнить массивы (http://www.flasher.ru/forum/showthread.php?t=70467)

Mnilionic 15.10.2005 02:56

as1, сравнить массивы
 
old_data = ["a", "b", "g"];
new_data=["b", "c", "f", "k"];
помогите, пожалуйста, получить массивы:
get_element = ["c", "f", "k"];
lost_element = ["b", "g"];

iNils 15.10.2005 11:47

А логика какая?

Mnilionic 15.10.2005 19:54

сравнив старый и новый массив нужно получить элементы которых нет в old_data и соответственно, которых нет в new_data

KidsKilla 15.10.2005 20:11

видимо
old_data = ["a", "b", "g"];
new_data=["b", "c", "f", "k"];
и
get_element = ["c", "f", "k"];
lost_element = ["a", "g"];
...

Mnilionic 15.10.2005 20:23

это дано:
old_data = ["a", "b", "g"];
new_data=["b", "c", "f", "k"];

а это ответ:
get_element = ["c", "f", "k"];
lost_element = ["a", "g"];

и нужно решение. понятно?

Mnilionic 16.10.2005 02:26

в общем уже сам смастерил...
Код:

old_data = ["g", "a", "e", "d"];
new_data = ["e", "v", "a", "b", "c", "g"];
lost_data = old_data;
get_data = new_data ;
for (i1=0; i1<old_data.length; i1++) {
    for (i2=0; i2<new_data.length; i2++) {
        if (old_data[i1] == new_data[i2]) {
            lost_data.splice(i1, 1);
            get_data.splice(i2, 1);
            i1--;
            break;
        }
    }
}
trace(lost_data);
trace(get_data);


iNils 16.10.2005 02:42

только не понятен смысл:
lost_data = old_data;
get_data = new_data;

в данном случаи ты создаешь не новые массивы, а указатели на массивы. и производя действия с lost_data, ты делаешь то же самое и в old_data

KidsKilla 16.10.2005 03:03

lost_data = old_data.concat();
get_data = new_data.concat();

iNils 16.10.2005 03:23

Да нет, ты не прав. Ты создаешь массив с одним элементом который есть String. Вариант KidsKilla то что нужно.

Mnilionic 16.10.2005 03:24

iNils, вариант KidsKilla тоже вызывает аборт скриптов :(

KidsKilla 16.10.2005 03:36

Код:

var a = [1,2,3,4];
var b = [1,2,3,5,6]
var lost_data = a.concat();
var get_data = b.concat();
for(var i=a.length; --i>=0;){
        for(var j=b.length; --j>=0;){
        if (a[i] == b[j]) {
            lost_data.splice(i, 1);
            get_data.splice(j, 1);
            break;
        }
        }
}
trace(["lost[",lost_data,"] get[", get_data,"]"]);
trace([a," : ",b])


Mnilionic 16.10.2005 03:42

KidsKilla, прекрасно! А почему в моей конструкции не работает?
было бы мило с вашей стороны растолковать мне.

KidsKilla 16.10.2005 04:03

Цитата:

Сообщение от Mnilionic
KidsKilla, прекрасно! А почему в моей конструкции не работает?
было бы мило с вашей стороны растолковать мне.

не знаю что там было не так, но совершенно точно i1-- было лишним.
по сути я скопировал твой же скрипт =)

KidsKilla 16.10.2005 04:05

кстати, этот вариант будет работать с глюками. нужен другой...

iNils 16.10.2005 04:08

old_data = ["a", "b", "c", "d"];
new_data = ["c", "d", "e"];
lost_data = String (old_data).split (",");
get_data = String (new_data).split (",");
for (i1 = 0; i1 < lost_data.length; i1++) {
for (i2 = 0; i2 < get_data.length; i2++) {
if (lost_data[i1] == get_data[i2]) {
lost_data.splice (i1, 1);
get_data.splice (i2, 1);
i1--;
break;
}
}
}
trace (old_data);
trace (new_data);
trace (lost_data);
trace (get_data);

KidsKilla 16.10.2005 19:49

Код:

function compare(a,b){
        function killDuplicates(arr) {
                var uniqArr = [];
                var i = arr.length;
                var f = false;
                function fnd(a, el) {
                        var i = a.length;
                        while (--i>=0) if (a[i] == el) return true;
                        return false;
                }
                while (--i>=0) {
                        for (var j = uniqArr.length; --j>=0; ) if (fnd(uniqArr, arr[i])) f = true;
                        if (f) {
                                f = false;
                                continue;
                        }
                        uniqArr[uniqArr.length] = arr[i];
                        f = false;
                }
                return uniqArr;
        }
        var lost_data = killDuplicates(a);
        var get_data = killDuplicates(b);
        for (var i=lost_data.length; --i;) {
                for (var j=get_data.length; --j;) {
                        if (lost_data[i] == get_data[j]) {
                                lost_data.splice(i, 1);
                                get_data.splice(j, 1);
                        }
                }
        }
        return {lost:lost_data, added:get_data};
}



var result = compare([1, 1, 1, 1, 2, 3, 4, 4, 4, 4], [1, 2, 3, 5, 6]);
trace("lost: "+result.lost);
trace("added: "+result.added);


Часовой пояс GMT +4, время: 08:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.