Форум 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)
-   -   Как создать зависимость между массивами? (http://www.flasher.ru/forum/showthread.php?t=103736)

AlliAS 11.11.2007 15:59

Как создать зависимость между массивами?
 
Привет, это опять я.
На этот раз у меня такая трабла:
я хочу узнать как создать зависимость между массивами. Ну а если попроще, то смотрите:
есть у меня код, в котором 2 массива: первый содержит русские слова, второй - их английский перевод
как видно из кода, оба массива сортируються, но после сортировки индексы русских слов не соответствуют индексам английских.
Код:

var oneArray:Array = new Array("круг","квадрат","круто","красный","зеленый")
var twoArray:Array = new Array("circle","square","cool","red","green")
oneArray.sort();
twoArray.sort();
trace(oneArray)
trace(twoArray)
//зеленый,квадрат,красный,круг,круто
//circle,cool,green,red,square
//а нужно:
//зеленый,квадрат,красный,круг,круто
//green,square,red,circle,cool

Как сделать так, чтобы индексы элементов второго массива менялись согласно первому?

DarkLight 11.11.2007 16:09

сведите в один массив объектов с полями, и используйте sortOn

olexandr 11.11.2007 16:10

как вариант, хранить переводы слов в виде свойств соответствующих элементов русского массива.

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

2morrowMan 11.11.2007 16:43

Код:

var oneArray:Array = new Array("круг","квадрат","круто","красный","зеленый");
var twoArray:Array = new Array("circle","square","cool","red","green");
var thirdArray:Array = [];
for (var i:int = 0; i < oneArray.length; i++)
{
        thirdArray[oneArray[i]] = twoArray[i];
}
oneArray.sort();
for each(var word:String in oneArray)
{
        trace(word + ' - ' + thirdArray[word]);
}

Для подобного есть и еще можно придумать не один способ ;)

iNils 11.11.2007 16:45

2morrowMan, это раздел не по AS3, поэтому правте код.
Который к тому же с ошибкой.

wvxvw 11.11.2007 19:17

Код:

var a_arr:Array = ["zo","za","zaa","ya","Zia"];
var b_arr:Array = ["1","2","3","4","5"];
var foo_arr:Array = [];
//
a_arr.sort(sortABC);
b_arr.sort(sortPattern);
trace(a_arr);
trace(b_arr);
function sortABC(a,b):Number {
        var _a:Number = a.toLowerCase().charCodeAt(0);
        var _b:Number = b.toLowerCase().charCodeAt(0);
        var i:Number = 0;
        while(_a==_b){
               
                i++;
                var _a:Number = a.toLowerCase().charCodeAt(i);
                var _b:Number = b.toLowerCase().charCodeAt(i);
                if(i>=a.length){
                        foo_arr.push(0);
                        return 0;
                }
        }
        if(_a<_b){
                foo_arr.push(-1);
                return -1;
        } else {
                foo_arr.push(1);
                return 1;
        }
}
function sortPattern():Number {
        return isNaN(foo_arr[0]/1)? 0 : foo_arr.shift();
}

Ну, это общая задумка, нужно еще подумать, как бы оптимизировать.

upd:
Код:

Array.prototype.multySort = function(f:Function):Void {
        var i:Number = 0;
        while(i<this.length){
                if(f(this[i],this[i+1])==-1){
                        var _a = this[i];
                        var _b = this[i+1];
                        this[i] = _b;
                        this[i+1] = _a;
                        var al:Number = arguments.length;
                        while(al>1){
                                var _a = arguments[al-1][i];
                                var _b = arguments[al-1][i+1];
                                arguments[al-1][i] = _b;
                                arguments[al-1][i+1] = _a;
                                al--;
                        }
                        i--;
                } else {
                        i++;
                }
        }
        this.reverse();
        var al:Number = arguments.length;
        while(al>1){
                arguments[al-1].reverse();
                al--;
        }
}
//
var a_arr:Array = ["zo","za","под","ya","Zia"];
var b_arr:Array = ["1","2","3","4","5"];
//
a_arr.multySort(sortABC,b_arr);
//
trace(a_arr);
trace(b_arr);
function sortABC(a,b):Number {
        var _a:Number = a.toLowerCase().charCodeAt(0);
        var _b:Number = b.toLowerCase().charCodeAt(0);
        var i:Number = 0;
        while(_a==_b){
               
                i++;
                var _a:Number = a.toLowerCase().charCodeAt(i);
                var _b:Number = b.toLowerCase().charCodeAt(i);
                if(i>=a.length){
                        return 0;
                }
        }
        if(_a<_b){
                return -1;
        } else {
                return 1;
        }
}

Ну, я знаю, что не стоит работать с прототипами, но, на мой взглайд, может быть полезная утилита =)

AlliAS 11.11.2007 22:50

Ого какой здоровенный код на такую простую функцию. Что неужели нету спец методов сортировки одного массива на основании другого?

Но все равно большое спасибо


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

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