Объединение данных в ассоциативные списки
Средства отладки Visual LISP
|
| ||||
Объединение данных в ассоциативные списки | |||||
Хотя предыдущий пример работает, того же самого результата можно добиться другим, более удобным, способом. В следующем упражнении создается ассоциативный список (обрабатываемый LISP-функцией assoc). В ассоциативном списке с каждым элементом-значением связывается свой ключевой код. Ниже приведен пример ассоциативного списка:
((10 4.46207 4.62318 0.0) (11 7.66688 4.62318 0.0) (40 . 1.018248)) В этом списке ключевыми кодами являются числа 10, 11 и 40. Эти ключевые коды служат уникальным индексом списка. С помощью данного механизма AutoCAD возвращает в AutoLISP информацию об объектах, полученную при выполнении программы. Код 10 обозначает начальную точку, код 11 обычно используется для конечной точки. В чем преимущество использования ассоциативного списка? В отличие от обычного списка, порядок значений в нем не играет никакой роли. Еще раз рассмотрим первый список: ((4.46207 4.62318 0.0) (7.66688 4.62318 0.0) 0.509124) Присмотримся к возвращенным значениям. Непонятно, какой из вложенных списков соответствует начальной, а какой — конечной точке. Более того, внесение изменений в такую функцию может нежелательным образом повлиять на другие функции, использующие возвращаемые ею данные. В ассоциативном списке порядок следования значений не важен. Даже при изменении порядка элементы ассоциативного списка всегда можно идентифицировать. Например, код 11 обозначает конечную точку вне зависимости от того, где она располагается в общем списке. ((11 7.66688 4.62318 0.0) ; order of list (40 . 1.018248) ; has been (10 4.46207 4.62318 0.0)) ; modified Темы: Применение ассоциативных списков Сохранение результата функции gp:getPointInput в переменной ї
|