Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Поиск значения в массиве, Как организовать быстрый поиск значения в массиве?
Shefon
сообщение 23.12.2012, 14:40
Сообщение #1


**

Neophyte
Сообщений: 35
Регистрация: 16.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.571
Возраст: 35



Задача такая: Есть массив в первом разряде которого внесены цвета точек, есть цвет которы нужно найти в этом массиве. На выходе нужен номер ячейки с исходным цветом , ну или 0 если такого цвета не обнаруженно.

Как я это представляю:
Код
set #color 12345
set %arr [1 1] 12345
set %arr [2 1] 45678
set %arr [3 1] 90123
...

set #1 size (%arr)
set #2 0
while #2 < #1
set #2 #2 + 1
set #3 %arr [#2 1]
if #3 = #color
goto yes_color
end_if
end_while
set #2 0
:yes_color
...


Так вот, чёта мне кажется что в таком виде будут тормоза если у массива будет значений под сотню..
Может кто то предложит более оптимальный алгоритм. Или может есть функция поиска по массивам?

А то у мне уже в голову лезут дурные идеи сделать полоску на экране из исходных точек и искать по ней цвет с помощью findcolor ..
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 23.12.2012, 14:47
Сообщение #2


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



читайте Историю развития в пилоте:
Цитата
добавил поиск строки в массиве. по-умолчанию ищет точное совпадение, регистронезависимо. 'set %result indexOf ( %arr [noabs] [case] [[startRow [EndRow]] count] (text) )'
параметры:
noabs - если указано, то ищем подстроку, иначе абсолютное совпадение, кроме регистра
case - если указано, то при сравнении учитывается регистр символов
count - максимальное число найденых элементов. если > 0, то ищем в направлении "с начала", если < 0, то ищем в направлении "с конца". если не указан, то ищем "все". этот параметр имеет приоритет в порядке распознавания, над начальной и конечной позицией поиска.
ищет по столбцам. возвращает адреса найденных элементов в формате 'строка|столбец/'. пример: '3|7/3|8/4|7/4|8/'. его хорошо понимает команда 'set' для присваивания элементов массива пачкой. если ничего не найдено, то вернет пустую строку.
если в качестве приемника указана целая переменная ('set #e indexOf...'), то возвращаем номер только одной строки. причем 'count' указывает какое по порядку вхождение нужно искать. если элемент с указанным номером не найден, то результат -1.
примеры:
set #a indexOf ( %arr case -1 (Test) ) // ищет номер последнего элемента массива %arr, имеюшего значение в точности равное Test (с учетом регистра)
set #b indexOf ( %arr (12) ) // ищет номер первого элемента массива %arr, имеюшего значение в точности равное 12
set #c indexOf ( %arr noabs 3 (admin) ) // ищет номер третьего элемента массива %arr, содержащего подстроку 'admin'
set %r indexOf ( %arr case 5 15 2 (Passed) ) // просматривает элементы массива %arr с пятой строки по пятнадцатую, и возвращает в массив %r адреса ячеек, содержащих первые два точных совпадения с искомой строкой
set %r indexOf ( %a (14) ) // возвращает в массив %r адреса всех ячеек, сорвпадающих с указанной строкой


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Shefon
сообщение 23.12.2012, 15:12
Сообщение #3


**

Neophyte
Сообщений: 35
Регистрация: 16.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.571
Возраст: 35



Такая полезная функция и нигде кроме истории не значится. Уже и поиск по форуму врубал с разными запросами, результат нулевой. Спасибо за исчерпывающий ответ.)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 2:20
Designed by Nickostyle