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

bas784 18.01.2010 22:38

Функция поиска в отсортированом масивве
 
Необходима функция поиска для массива Array
Есть ли она? И как её реализовать для 6-ого плеера?
То-еесть могу и сам написать но может у вас есть наработки какие-нибудь!!
Как говорится зачем изобретать велосипед?
Заранее спасибо за помощь!

Hauts 18.01.2010 22:49

Код AS1/AS2:

function searchInArray(arr, obj){
    for(var i in arr){
        if(arr[i] == obj){
            return i
        }
    }
    return -1
}

Типа такой? Для шестого плеера подойдет и так:
Код AS1/AS2:

Array.prototype.search = function(obj) {
        for (var i in this) {
                if (this[i] == obj) {
                        return i;
                }
        }
        return -1;
};
var a = ["a", "b", "c"];
trace(a.search("b"));


bas784 18.01.2010 22:59

хм но здесь простой перебор! Мне нужно что нибудь пооптимальней
Функция очень критична для исполнения скрипта!
А комп слабый

udaaff 18.01.2010 23:03

Цитата:

Сообщение от bas784 (Сообщение 880071)
хм но здесь простой перебор! Мне нужно что нибудь пооптимальней
Функция очень критична для исполнения скрипта!
А комп слабый

Переходите на AS3.0 в таком случае.

bas784 18.01.2010 23:05

С радостью но не могу привязан к 6-ому

udaaff 18.01.2010 23:07

Цитата:

Сообщение от bas784 (Сообщение 880073)
С радостью но не могу привязан к 6-ому

Ну тогда перебором :)

bas784 18.01.2010 23:08

Мда чувствую нароботок не у кого нету придётся шерстить Кнута

Hauts 18.01.2010 23:33

А какие еще могут быть наработки? Расскажите?

Зачем вам шестой плеер, когда уже есть десятый?

Что вы намерены сделать для шестого плеера, учитывая, что вам нужно что-то найти в массиве, но простой перебор является критичным?

bas784 18.01.2010 23:40

А)массив большой !
Б)Функция вызывается часто при перерасчёте!
В)Компьютер слабый
Г) Помимо плеера на нем лежат другие более важные задачи
Д) Заличензирован только 6-ой
И т д и т п
этот список можно продолжать .....

Hauts 19.01.2010 08:14

Я вас понял. Можно попробовать присваивать ключ к объекту, и уже смотреть существование ключа в объекте, а не перебор массива. Например, так:
Код AS1/AS2:

Array.prototype.addForSearch = function(obj, key) {
        if (this.keysObject == undefined) {
                this.keysObject = {};
        }
        //key = (!key) ? obj : key;
        this.push(obj);
        this.keysObject[key] = {id:this.length-1};
        return this.length;
};
Array.prototype.searchByKey = function(key, returnObject) {
        if (!this.keysObject) {
                return -1;
        }
        if (this.keysObject[key] != undefined) {
                if (this[this.keysObject[key].id] != undefined) {
                        if (returnObject) {
                                return this[this.keysObject[key].id];
                        }
                        return this.keysObject[key].id;
                }
        }
        return -1;
};
var someArray = []
someArray.addForSearch({text:"One"}, 1)
someArray.addForSearch({text:"Two"}, 2)
someArray.addForSearch({text:"Three"}, 3)
someArray.addForSearch({text:"Four"}, 4)
someArray.addForSearch({text:"Five"}, 5)
 
trace(someArray.searchByKey(3)) // Второй номер в массиве, третий элемент
trace(someArray.searchByKey(3, true).text) // Вернет объект по ключу

В общем, исходя из конкретной задачи, можно придумать, как организовать поиск в массиве. Если известно, что в нем хранится (объекты, числа, строки?).


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

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