|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Найти ближайший элемент массива по индексу
имеется такого вида массив
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. Есть какие-нибудь другие способы? Шкала нужна как в яндекс->карты-> пробки-> прогноз |
|
|||||
я не имею понятия откуда у вас взялся такой массив, и предполагаю что индексы там могут быть любыми, не только кратными 11, в этом случае алгоритм будет таким:
1. перебрать массив начиная с 30ого индекса в поисках непустой ячейки (в данном случае будет найден индекс 33) 1а. если ничего не найдено то резултат это значение последней ячейки - вуаля 2. перебираем от 30ого индекса вниз, пока не будет найдена непустая ячейка 2а. если ничего не найдено то результат это значение первой ячейки - вуаля 3. сравниваем что ближе к 30, 22 или 33, вуаля кода будет, строчек 20, но работать будет быстро
__________________
Хороший отдых - половина работы. |
|
|||||
Регистрация: 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/ |
|
|||||
зачем нужно 11, 22, 33... ?
Почему не сделать при поднеесении к шкале мыши такой вариант: arrayIndex * 11 ? (ну или что там нужно, не совсем понятно) Ну или типа того. Мне кажется делать массив с кучей пустых ячеек - в корне не правильная идея |
|
|||||
Цитата:
__________________
http://www.chessmax.ru Последний раз редактировалось Inet_PC; 03.10.2012 в 09:31. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Зачем здесь, вообще, нужен массив?
|
|
|||||
Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
ну чтобы хранить положения бегунка, и соответствующее этому положению время.
А бывают еще какие-нибудь варианты как это организовать? |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Значения, насколько я вижу, равномерно ведь распределяются. Т.е. у вас есть начальное положение бегунка - 0, и конечное - 100%. Есть промежуток времени, начальное значение какое-то и конечное.
По этому текущему проценту и определяйте соответствующее время. Без всяких массивов. Другое дело, если бы значение были нелинейно распределены. |
Часовой пояс GMT +4, время: 12:39. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|