Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.10.2012, 05:41
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 1  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию Найти ближайший элемент массива по индексу

имеется такого вида массив
Код AS3:
var arr:Array = [];
arr[0] = "06:00";
arr[11] = "07:00";
arr[22] = "08:00";
arr[33] = "09:00";
arr[44] = "10:00";
arr[55] = "11:00";
arr[66] = "12:00";
arr[77] = "13:00";
этот массив нужен чтобы рисовать всплывающие подсказки для шкалы:
если координата бегунка равна или близка к индексу массива, то выводить значение элемента массива
и есть число допустим 30, мне нужно найти элемент, с индексом ближайшим к 30,
то есть arr[33] = "09:00";
если число 39, то arr[44] = "10:00";
пока на ум приходит только округление по модулю 11 в меньшую сторону, и сравнивание текущего значения с полученным, если <6 то оставляем , если >6, то прибавляем 11. Есть какие-нибудь другие способы?
Шкала нужна как в яндекс->карты-> пробки-> прогноз

Старый 03.10.2012, 06:16
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 2  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
я не имею понятия откуда у вас взялся такой массив, и предполагаю что индексы там могут быть любыми, не только кратными 11, в этом случае алгоритм будет таким:

1. перебрать массив начиная с 30ого индекса в поисках непустой ячейки (в данном случае будет найден индекс 33)
1а. если ничего не найдено то резултат это значение последней ячейки - вуаля
2. перебираем от 30ого индекса вниз, пока не будет найдена непустая ячейка
2а. если ничего не найдено то результат это значение первой ячейки - вуаля
3. сравниваем что ближе к 30, 22 или 33, вуаля

кода будет, строчек 20, но работать будет быстро
__________________
Хороший отдых - половина работы.

Старый 03.10.2012, 06:38
vizgl вне форума Посмотреть профиль Отправить личное сообщение для vizgl Найти все сообщения от vizgl
  № 3  
Ответить с цитированием
vizgl
 
Аватар для vizgl

Регистрация: Jun 2012
Сообщений: 70
Какой-то странный у Вас массив. В нем все-равно будут существовать неиспользуемые ячейки и их придется перебирать, чтобы добраться до нужной.

Думаю, проще сделать так.
1) Организовать хранение данных по другому:
data[0] = { index: 0, time: "06:00" };
data[1] = { index: 11, time: "07:00" };
data[2] = { index: 22, time: "08:00" };
...

2) Бинарным поиском(немного модифицированным) по полю index найти нужную ячейку

Прирост скорости будет существенным.
__________________
Блог: http://devizgl.blogspot.com/

Старый 03.10.2012, 07:20
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
зачем нужно 11, 22, 33... ?

Почему не сделать при поднеесении к шкале мыши такой вариант:

arrayIndex * 11 ? (ну или что там нужно, не совсем понятно)

Ну или типа того. Мне кажется делать массив с кучей пустых ячеек - в корне не правильная идея

Старый 03.10.2012, 09:14
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 5  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
В нем все-равно будут существовать неиспользуемые ячейки и их придется перебирать, чтобы добраться до нужной.
Можно пробежаться for in-ом / for each-ом.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 03.10.2012 в 09:31.
Старый 03.10.2012, 09:34
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Зачем здесь, вообще, нужен массив?

Старый 03.10.2012, 09:45
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от Isfet Посмотреть сообщение
пока на ум приходит только округление по модулю 11 в меньшую сторону, и сравнивание текущего значения с полученным, если <6 то оставляем , если >6, то прибавляем 11. Есть какие-нибудь другие способы?
а так
Код AS3:
private function getIndx(n:Number):int
{
 
	return 11 * Math.round(n / 11);
}

Старый 03.10.2012, 11:57
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
если в меньшую сторону, то можно так:
Код AS3:
return 11 * int(n / 11);

Старый 03.10.2012, 16:53
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 9  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от udaaff Посмотреть сообщение
Зачем здесь, вообще, нужен массив?
ну чтобы хранить положения бегунка, и соответствующее этому положению время.
А бывают еще какие-нибудь варианты как это организовать?

Старый 03.10.2012, 17:07
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 10  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Значения, насколько я вижу, равномерно ведь распределяются. Т.е. у вас есть начальное положение бегунка - 0, и конечное - 100%. Есть промежуток времени, начальное значение какое-то и конечное.
По этому текущему проценту и определяйте соответствующее время. Без всяких массивов.

Другое дело, если бы значение были нелинейно распределены.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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