PDA

Просмотр полной версии : оптимизация сортировки


efim
08.07.2002, 15:17
Дорогие господа флашеры

сталкнулся сейчас с не приятной проблемой

на обычную сортировку массива imagesArray.sort();

происходит зависание то бишь action script run slow

и вторая проблемма (могу рeшить сомостоятельно через поиск)

split переписать чтоб быстрей работал

Спасибо заранее

derhab
08.07.2002, 15:24
Исходник покажи, пожалуйста, или скрипт напиши...

efim
08.07.2002, 15:33
скрипт кину только не бейте сильно :D


for (i=1963; i<=2002; i++) {
this["y"+i] = [];
//обьявляем массивы изображений
this["n"+i] = [];
//обьявляем массивы текстов
}
for (i in imagesArray) {
var t = "n"+imagesArray[i].split(".jpg")[0];
textArray.push(t);
//выделяем что грузить в текстовое
}
//imagesArray.sort(Fn);
//textArray.sort();//сортируем
for (i in textArray) {
var nameText = textArray[i].split("_")[0];
if (nameText == "n1963") {
n1963.push(textArray[i]);
}
if (nameText == "n1964") {
n1964.push(textArray[i]);
}
if (nameText == "n1965") {
n1965.push(textArray[i]);
}
if (nameText == "n1966") {
n1966.push(textArray[i]);
}
if (nameText == "n1967") {
n1967.push(textArray[i]);
}
if (nameText == "n1968") {
n1968.push(textArray[i]);
}
if (nameText == "n1969") {
n1969.push(textArray[i]);
}
if (nameText == "n1970") {
n1970.push(textArray[i]);
}
if (nameText == "n1971") {
n1971.push(textArray[i]);
}
if (nameText == "n1972") {
n1972.push(textArray[i]);
}
if (nameText == "n1973") {
n1973.push(textArray[i]);
}
if (nameText == "n1974") {
n1974.push(textArray[i]);
}
if (nameText == "n1975") {
n1975.push(textArray[i]);
}
if (nameText == "n1976") {
n1976.push(textArray[i]);
}
if (nameText == "n1977") {
n1977.push(textArray[i]);
}
if (nameText == "n1978") {
n1978.push(textArray[i]);
}
if (nameText == "n1979") {
n1979.push(textArray[i]);
}
if (nameText == "n1980") {
n1980.push(textArray[i]);
}
if (nameText == "n1981") {
n1981.push(textArray[i]);
}
if (nameText == "n1982") {
n1982.push(textArray[i]);
}
if (nameText == "n1983") {
n1983.push(textArray[i]);
}
if (nameText == "n1984") {
n1984.push(textArray[i]);
}
if (nameText == "n1985") {
n1985.push(textArray[i]);
}
if (nameText == "n1986") {
n1986.push(textArray[i]);
}
if (nameText == "n1987") {
n1987.push(textArray[i]);
}
if (nameText == "n1988") {
n1988.push(textArray[i]);
}
if (nameText == "n1989") {
n1989.push(textArray[i]);
}
if (nameText == "n1990") {
n1990.push(textArray[i]);
}
if (nameText == "n1991") {
n1991.push(textArray[i]);
}
if (nameText == "n1992") {
n1992.push(textArray[i]);
}
if (nameText == "n1993") {
n1993.push(textArray[i]);
}
if (nameText == "n1994") {
n1994.push(textArray[i]);
}
if (nameText == "n1995") {
n1995.push(textArray[i]);
}
if (nameText == "n1996") {
n1996.push(textArray[i]);
}
if (nameText == "n1997") {
n1997.push(textArray[i]);
}
if (nameText == "n1998") {
n1998.push(textArray[i]);
}
if (nameText == "n1999") {
n1999.push(textArray[i]);
}
if (nameText == "n2000") {
n2000.push(textArray[i]);
}
if (nameText == "n2001") {
n2001.push(textArray[i]);
}
if (nameText == "n2002") {
n2002.push(textArray[i]);
}
}
for (i in imagesArray) {
var name = imagesArray[i].split("_")[0];
if (name == "1963") {
y1963.push(imagesArray[i]);
}
if (name == "1964") {
y1964.push(imagesArray[i]);
}
if (name == "1965") {
y1965.push(imagesArray[i]);
}
if (name == "1966") {
y1966.push(imagesArray[i]);
}
if (name == "1967") {
y1967.push(imagesArray[i]);
}
if (name == "1968") {
y1968.push(imagesArray[i]);
}
if (name == "1969") {
y1969.push(imagesArray[i]);
}
if (name == "1970") {
y1970.push(imagesArray[i]);
}
if (name == "1971") {
y1971.push(imagesArray[i]);
}
if (name == "1972") {
y1972.push(imagesArray[i]);
}
if (name == "1973") {
y1973.push(imagesArray[i]);
}
if (name == "1974") {
y1974.push(imagesArray[i]);
}
if (name == "1975") {
y1975.push(imagesArray[i]);
}
if (name == "1976") {
y1976.push(imagesArray[i]);
}
if (name == "1977") {
y1977.push(imagesArray[i]);
}
if (name == "1978") {
y1978.push(imagesArray[i]);
}
if (name == "1979") {
y1979.push(imagesArray[i]);
}
if (name == "1980") {
y1980.push(imagesArray[i]);
}
if (name == "1981") {
y1981.push(imagesArray[i]);
}
if (name == "1982") {
y1982.push(imagesArray[i]);
}
if (name == "1983") {
y1983.push(imagesArray[i]);
}
if (name == "1984") {
y1984.push(imagesArray[i]);
}
if (name == "1985") {
y1985.push(imagesArray[i]);
}
if (name == "1986") {
y1986.push(imagesArray[i]);
}
if (name == "1987") {
y1987.push(imagesArray[i]);
}
if (name == "1988") {
y1988.push(imagesArray[i]);
}
if (name == "1989") {
y1989.push(imagesArray[i]);
}
if (name == "1990") {
y1990.push(imagesArray[i]);
}
if (name == "1991") {
y1991.push(imagesArray[i]);
}
if (name == "1992") {
y1992.push(imagesArray[i]);
}
if (name == "1993") {
y1993.push(imagesArray[i]);
}
if (name == "1994") {
y1994.push(imagesArray[i]);
}
if (name == "1995") {
y1995.push(imagesArray[i]);
}
if (name == "1996") {
y1996.push(imagesArray[i]);
}
if (name == "1997") {
y1997.push(imagesArray[i]);
}
if (name == "1998") {
y1998.push(imagesArray[i]);
}
if (name == "1999") {
y1999.push(imagesArray[i]);
}
if (name == "2000") {
y2000.push(imagesArray[i]);
}
if (name == "2001") {
y2001.push(imagesArray[i]);
}
if (name == "2002") {
y2002.push(imagesArray[i]);
}
}
for (i=1963; i<=2002; i++) {
this["n"+i].sort();
this["y"+i].sort();
}
trace(n1963);
etotGod = y1963;
etotGodText = n1963;
stop();

lexass
08.07.2002, 15:43
а мне бы было лень столько писать :)

efim
08.07.2002, 15:49
lexass дак изволь научи ибудем писать как надо

пишем как умеем :D :) :D


вообще replace and copy and past тоже рулит :D

off topic

что такое rtfm

derhab
08.07.2002, 15:51
Да-а... хрен знает... Может все ж исходник выложишь? ;)

efim
08.07.2002, 15:56
derhab ВСЕ ТАМ проверено уже

плюс большой он уменя плюс работает с внешнеи даными

а без них не очень то наглядно

//imagesArray.sort(Fn); читать как //imagesArray.sort();

lexass
08.07.2002, 15:59
постановка задачи неясна:(
но из того что я понял:
for (i=1963; i<=2002; i++) {
if (nameText == 'n'+i)
this['n'+i].push(textArray[i]);
if (name == i)
this['y'+i].push(imagesArray[i]);
}

lexass
08.07.2002, 16:04
for (i in textArray) {
this[i].push(textArray[i]);
}
for (i in imagesArray) {
this[i].push(imagesArray[i]);
}

непонятна задача

ЗЫ
работа с таким кол-вом стрингов ------ ТОРМОЗА :(

efim
08.07.2002, 16:16
lexass спасибо

но вот проблемы не решает хотя конечно скрипт короче ;) :p


если готов ~1Mбайт принять сейчас кину

суть я уже много раз писал

одно окно грузятся картинки другое грузится описание

есть кнопки перехода туда обратно

изюменка( извините пожалуйста за русский язык)

название файлов формируется через

dir дос каманда

dir>> test.txt /b/o-n/a .jpg

а дальше обрабатавыется массив но а текстовый файл уже обрабатывается на основе изображений

efim
08.07.2002, 16:22
да формат имени файла год_номер.jpg


переход по годам

lexass
08.07.2002, 16:26
2 efim
а накой исходник???
кидай кусок тхт

efim
08.07.2002, 16:39
ish и nox писали как это обработать в общем разделе

проблема в том что у меня не сколько кнопок

и если не зделать сортировку будет не соответсвие текста картинке

lexass
08.07.2002, 17:04
предлагаю для переваривания рассматривать вариант:
________________________

2001_990.jpg
2001_991.jpg
2001_992.jpg
2001_993.jpg
2001_994.jpg
________________________
это у нас такая маленькая строка (предположим "Х") которую мы засунем в массив
xz=Х.split(".jpg")
я прально рассуждаЮ???

1 а откель описалово
2 как они между соБой сопоставляются

efim
08.07.2002, 17:14
предлагаю для переваривания рассматривать вариант:
________________________

2001_990.jpg
2001_991.jpg
2001_992.jpg
2001_993.jpg
2001_994.jpg
________________________
это у нас такая маленькая строка (предположим "Х") которую мы засунем в массив
xz=Х.split(".jpg")

сейчас ппробую

lexass они не как не сапоставляются просто когда сортируешь они в одном порядке идут

тоесть два массива один с изображением например
2001_991.jpg и переменая загнаная в массив n2001_991

теxt и картинки не мои получаю преобразовав htmlфайл например
n1963_259=

1822
Ленинград. Здание
бывших лесных
складов, так
называемая "Новая
голландия"
В черной рамке
259

ЛФОП3
1963
вер.
90х58
100т.

за .jpg я не догдался заципится а не будет он на переход строки ругаться

если твоя строка сработает это позволет один массив убрать

lexass
08.07.2002, 17:36
за .jpg неполучится просто так заципится:(
но я думаю ты знаешь как ;)
c='2001_990.2001_991.2001_992.2001_993.2001_994';
xz=c.split(".");y=[];
for (i=0; i<xz.length; i++){
tmp=xz[i].split("_")
if(!y[tmp[0]].length)y[tmp[0]]=[];
y[tmp[0]].push(tmp[1])
}
имеем массив=[
[год][к,у,ч,а з,н,а,ч,е,н,и,й],
[год][к,у,ч,а з,н,а,ч,е,н,и,й]
]
далее если ты знаешь что описалово в филе "n2001_990":

'n'+y[год]+y[год][index]

efim
08.07.2002, 17:56
lexass спасибо

буду разбираться мне сразу все не переварить

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

flash для меня скорей хобби а так я верстаю html странички

оfftopic

мне удалось свою подругу флашем увлеч я думаю у ней быстрей подет т.к. у нее есть опыт с++ плюс она математик

еще раз спасибо

LostWarrior
08.07.2002, 18:08
У меня такое предчуствие, что вы сортируете масив не по году и номеру, а по содержания jpg'а. То есть не по ссылке, а по объекту. Вот и получается медленно.

lexass
08.07.2002, 18:11
Гы%)
сортируем по тому что есть :p

;)

Nox Noctis
08.07.2002, 18:42
мне если честно не очень хочется читать все вышенаписанное (ну, извините :) )

так что я по поводу самого первого сообщения :) насчет убыстрения сплита...

можно все строковые методы значительно ускорить переписав их через функцию substring (но НЕ метод объекта String)

если не лениво - то можно написать самостоятельно, но...
есть такой дядька - Бранден Холл... он senior developer в макромедии - у него куча статей в des\dev центре.
так вот он написал такую штуку:
http://chattyfig.figleaf.com/~bhall/code/string.as

кому неохота програмить - можно слямзить и не мучаться :)

efim
08.07.2002, 18:52
nox спасибо :D

но вот почти работает а то что я с тобой спорить и глупые вопросы задавать стал уж сердись дяденька :rolleyes: :)

Nox Noctis
08.07.2002, 19:13
кто со мной спорить стал ?
*клацающий звук затвора*
:D

efim
09.07.2002, 11:48
:D :):D :) :D

без слов

efim
09.07.2002, 12:06
if(!y[tmp[0]].length)y[tmp[0]]=[];
y[tmp[0]].push(tmp[1])
}


а вот это обьясните пожалуйста


спасибо заранее

lexass
09.07.2002, 12:16
что тебе из этих двух:
if(!y[tmp[0]].length)y[tmp[0]]=[];
y[tmp[0]].push(tmp[1]);
строк непонятно???

efim
09.07.2002, 12:19
!y[tmp[0]]

условие что это значит


lexass пока я не могу сказать что все понимаю с листа

по этому глупо но всеж разжуй пожалуста

мне еще не приходилась с двухмерными масивами дела иметь

lexass
09.07.2002, 12:21
!y[tmp[0]].length

efim
09.07.2002, 12:26
все разобрался спасибо :p :cool:

lexass
09.07.2002, 12:41
:)
надеюсь жизнь твоя облегчена ?
;)

efim
09.07.2002, 12:53
спасибо :)