Форум 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=118795)

igrayka 03.12.2008 21:42

Выборка наименьшего значения из массива
 
Есть массив , в нем допустим 13 2 16 233 188 45
как попрсить флэш чтобы выбрала наименьшее ( наибольшее ? )
Пожалуйста :)

Добавлено через 7 минут
Если в массиве 2-3 числа , то я понимаю их можно сравнить , а если больше ?

scarbo 03.12.2008 22:09

Код AS1/AS2:

var Arr:Array = new Array();
Arr = [13, 2, 16, 233, 188, 45];
Arr.sort(sravnenie);
var vivod_min = Arr[0];//наименьшее число
Arr.reverse()
var vivod_max = Arr[0];// наибольшее число
trace(vivod_min)
trace(vivod_max)
//
function sravnenie(el1, el2) {
        if (el1<el2) {
                return -1;
        } else if (el1>el2) {
                return 1;
        } else {
                return 0;
        }
}


igrayka 03.12.2008 23:04

Большое спасибо !

Mnilionic 04.12.2008 04:39

если сам массив изменяться не должен, а нужно только найти значения, то можно так:
Код AS1/AS2:

var Arr:Array = new Array();
Arr = [13, 2, 16, 233, 188, 45];
 
 
function max_min(arr){
        var indexes = arr.sortOn(null, 16 | 8);
        var min = arr[indexes.shift()];
        var max = arr[indexes.pop()];
        return {max: max, min: min};
}
 
 
var rslt = max_min(Arr);
 
trace('max = ' + rslt.max + ', min = ' + rslt.min);
trace(Arr);


Жень Шень 04.12.2008 11:07

Привет!
Вариант:
Код AS1/AS2:

var arr:Array = new Array();
arr = [13, 2, 16, 233, 188, 45];
var arr2:Array = new Array();
arr2=arr2.concat(arr)
arr2.sortOn("", Array.NUMERIC);
trace("arrMin="+arr2[0])
trace("arrMax="+arr2[arr.length-1])


igrayka 09.12.2008 20:44

Жень Шень
Привет , слушай , а что значит конкатенация , для чего она ? )
У меня все вроде работает и без неё , использую Array.NUMERIC

_musicano 09.12.2008 22:59

Ребята, а не проще ли так?
(поиск наименьшего члена последовательности)

Код AS1/AS2:

var Arr:Array = new Array();
Arr = [13, 2, 16, 233, 188, 45];
N = Arr.length;
 
min = Arr[0];
for (i=1; i<N; i++) {
        if (Arr[i]<min) {
                min = Arr[i];
        }
}
 
trace(min);

Функции sort, sortOn, reverse, concat вообще-то необоснованно увеличивают шаги алгоритма (и он дольше работает, хоть это и незаметно в данном случае). Несмотря на современные мощности, красоту алгоритмов ещё никто не отменял.

Объясняя человеку, как ищется наименьший элемент, неплохо бы детально понимать, как работает та же функция sortOn, согласны?

Жень Шень 10.12.2008 11:32

Цитата:

Сообщение от _musicano (Сообщение 782666)
Объясняя человеку, как ищется наименьший элемент, неплохо бы детально понимать, как работает та же функция sortOn, согласны?

Я доверяю ХЭЛПу от разработчика. В нем практичечки все понятно. Но может быть sortOn особый случай?
2igrayka я тоже много не знаю, но если возникает проблема толкования слова я обращаюсь сначала к википедии. Это не "тык", а предложении внести ссылку в свои закладки.
А если это по поводу "arr2=arr2.concat(arr)", то смотрим пункт #4: "если сам массив изменяться не должен..."


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

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