![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Привет, это опять я.
На этот раз у меня такая трабла: я хочу узнать как создать зависимость между массивами. Ну а если попроще, то смотрите: есть у меня код, в котором 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
|
|
|||||
|
ветеран форума
|
сведите в один массив объектов с полями, и используйте sortOn
__________________
4am is time to rock |
|
|||||
|
как вариант, хранить переводы слов в виде свойств соответствующих элементов русского массива.
или делать второе поле для своеобразного ID и после сортировки русского массива, расставлять английский в этом же порядке. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 467
|
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]);
}
![]() |
|
|||||
|
Modus ponens
|
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;
}
}
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 11.11.2007 в 20:10. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Ого какой здоровенный код на такую простую функцию. Что неужели нету спец методов сортировки одного массива на основании другого?
Но все равно большое спасибо Последний раз редактировалось screamge; 11.11.2007 в 22:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|