![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 18
|
Добрый день!
У меня есть многомерный массив следующей структуры: var mainArr:Array = new Array(); for ( i = 0; i < N; i++ ) { var subVar:Array = new Array(); subArr['m1'] = K1; // ну что то присваиваем элементу массива subArr['m2'] = K2; // тоже что то присваиваем элементу массива subArr['m3'] = K3; // тоже что то присваиваем элементу массива subArr['ml4'] = K4; // тоже что то присваиваем элементу массива mainArr[i] = subVar; // т.е. у каждого mainArr[i] есть mainArr[i]['m1'], mainArr[i]['m2'], mainArr[i]['m3'], mainArr[i]['m4'] } Как это можно сделать красивым способом? Я написал в лоб вот так: var yInd:Array = getMaxMinIndexInArr( mainArr, "m2" ); trace( "yInd " + yInd ); // вывод для дебага // возвращает минимальное и максимальное значение индексов из массива данных // в нашем случае index='m2' function getMaxMinIndexInArr( data_arr:Array, index:String ):Array { var arr:Array = new Array(2); var cur:Number = data_arr[0][index]; arr[0] = cur; arr[1] = cur; for( var i:Number = 1; i < (data_arr.length - 1) ; i++) { cur = data_arr[i][index]; trace( "cur =" + cur + " arr[0]=" + arr[0] );// организуе вывод для дебага if ( cur < arr[0] ) { arr[0] = cur; trace(" cur < arr[0] присвоили arr[0]=" + arr[0] );// еще один вывод для дебага } } return arr; } cur =658.63 arr[0]=644.47 cur =549.43 arr[0]=644.47 cur < arr[0] присвоили arr[0]=549.43 cur =1285.47 arr[0]=549.43 cur < arr[0] присвоили arr[0]=1285.47 yInd 1285.47,644.47 ПОдскажи плз. |
|
|||||
|
На первый взгляд, кажется что ошибка вот сдесь:
У тебя написано: а должно: и вместо: должно быть:
__________________
Ошибок не делает лишь тот, кто ничего не делает! |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 18
|
Помоему у меня написано все верно.
Ведь ,а написать cur = data_arr[index][i];// было бы не верно т.к. у data_arr нет элемента с индексом "m2", у него есть только индексы 0, 1, 2 и т.п. var mainArr:Array = new Array(); for ( i = 0; i < N; i++ ) { var subVar:Array = new Array(); subArr['m1'] = K1; // ну что то присваиваем элементу массива subArr['m2'] = K2; // тоже что то присваиваем элементу массива subArr['m3'] = K3; // тоже что то присваиваем элементу массива subArr['m4'] = K4; // тоже что то присваиваем элементу массива mainArr[i] = subVar; // т.е. у каждого mainArr[i] есть mainArr[i]['m1'], mainArr[i]['m2'], mainArr[i]['m3'], mainArr[i]['m4'] } Или я что то не понимаю? |
|
|||||
|
Да верно, но я вам указал на второй цикл с i, так как по вашему коду:
вы сравниваете не элементы внутренего массива с индексом index, а сравниваете элементы всех массивов с индексом indeх.... поэтому надо провести исправления которые я вам привёл выше...
__________________
Ошибок не делает лишь тот, кто ничего не делает! |
|
|||||
var sample:Array = [[10,20.8,5,40], [5,15,30,25], [7,14.5,21,28]]; var N = 3; var mainArr:Array = new Array(); for ( var i = 0; i < N; i++ ) { var subArr:Array = new Array(); subArr['m1'] = sample[i][0]; subArr['m2'] = sample[i][1]; subArr['m3'] = sample[i][2]; subArr['ml4'] = sample[i][3]; mainArr.push(subArr); } // поиск максимального и минимального m2 var indexes = mainArr.sortOn('m2', 8|16); var max_m2 = mainArr[indexes.pop()]['m2']; var min_m2 = mainArr[indexes.shift()]['m2']; trace('max m2 = ' + max_m2); trace('min m2 = ' + min_m2); Последний раз редактировалось Mnilionic; 18.01.2009 в 16:47. Причина: добавил поиск минимального значения |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 18
|
нет нет.. мне нужно именно найти максимальный и минимальный элемент с индексом ['m2'] среди все массивов data_arr[i], т.е. мне нужно искать не внутри какого data_arr[i] максимальный элемент, а найти среди всех массивов в data_arr мин макс элемент с индексом ["m2"]
|
|
|||||
|
ну я Вам и написал решение. Вы бы сначала посмотрели, а потом нет-неткали.
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 18
|
Mnilionic, а я вам
.Это был пост для Sajaxt. Mnilionic, ваше решение работает спасибо, то что надо! Sajaxt, вам тоже спасибо что потратили на меня время Ведь этой темы можно было избежать если бы решение в лоб у меня заработало А почему у меня не работало решение в лоб? Потому что я слишком доверчивый . Мой массив data_arr строиться из xml документа, параметры в котором являются значениями атрибутов узлов. Я понаделся что значения атрибутов сразу будут раззматриваться как Number, но как выяснилось лучше делать явное преобразование с помощью parseInt Вот так было: var subArr:Array = new Array(); subArr['date'] = curDate; subArr['r'] = curNode.attributes.r; subArr['m'] = curNode.attributes.m; subArr['mo'] = getRusMonthNameFromDate( curDate ); subArr['ml'] = mlsc / minimizer; mainArr[i] = subArr; var subArr:Array = new Array(); subArr['date'] = curDate; subArr['r'] = parseInt(curNode.attributes.r);// явное преобразование в число subArr['m'] = parseInt(curNode.attributes.m););// явное преобразование в число subArr['mo'] = getRusMonthNameFromDate( curDate ); subArr['ml'] = mlsc / minimizer; mainArr[i] = subArr; |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|