(vl-sort-i ‘(214.714 32.6901 295.193 113.679) ‘<)
위의구문을 실행했을때 값이
(1 3 0 2)
이렇게 나오는데요
(2 0 3 1) 이렇게 나와 맞는것 아닌가요?
왜 이렇게 나오는건지 잘이해가 안갑니다.
공유
비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.
해당 질문을 신고하는 이유를 간단히 입력해주세요.
해당 답변을 신고하는 이유를 간단히 입력해주세요.
해당 유저를 신고하는 이유를 간단히 입력해주세요.
kor님~~~항상 감사드립니다~~~ ^—^~~~~
결과가 1 3 0 2 라는 게 요소의 순서입니다.
‘< (오름차순)이니…
첫번째 1, 32.6901 = (nth 1 ‘(214.714 32.6901 295.193 113.679) )
두번째 3, 113.679 = (nth 3 ‘(214.714 32.6901 295.193 113.679) )
세번째 0, 214.714 = (nth 0 ‘(214.714 32.6901 295.193 113.679) )
네번째 2, 295.193 = (nth 2 ‘(214.714 32.6901 295.193 113.679) )
응용하자면,
(setq lst ‘(214.714 32.6901 295.193 113.679))
(mapcar ‘(lambda (i) (nth i lst)) (vl-sort-i lst ‘<))
‘(32.6901 113.679 214.714 295.193)
리스트가 크고 작음을 비교할 수 있을 경우 (vl-sort lst ‘<)로 하면 되지만
그렇지 않은 경우에 사용하면 유용합니다.
(defun sl-sort-by (lst func f)
(mapcar
‘(lambda (i) (nth i lst))
(vl-sort-i (mapcar ‘(lambda (x) ((eval func) x)) lst) f)
)
)
(defun c:test( / ss ens)
(vl-load-com)
(if (setq ss (ssget ‘((0 . “LINE”))))
(progn
(setq
ens (vl-remove-if ‘listp (mapcar ‘cadr (ssnamex ss))) ;ename list
;길이로 ename list 정렬…
ens (sl-sort-by ens ‘(lambda (en) (vlax-get (vlax-ename->vla-object en) ‘length)) ‘<)
)
;결과 확인
(mapcar ‘(lambda (en) (vlax-get (vlax-ename->vla-object en) ‘length)) ens)
)
)
)