2016-10-27 6 views
0

私はしばらくそれについてgoogledしましたが、解決策が見つかりませんでした。(assoc要素alist)すべてのエンティティを取得するautolisp

私はこのリストをしました:

((-1 . <Nome entità: 7ff5ff905910>) (0 . "DICTIONARY") (5 . "1F9") (102 . "{ACAD_REACTORS") (330 . <Nome entità: 7ff5ff9038c0>) (102 . "}") (330 . <Nome entità: 7ff5ff9038c0>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "1") (350 . <Nome entità: 7ff5ff9933c0>) (3 . "2") (350 . <Nome entità: 7ff5ff9fa0d0>) (3 . "3") (350 . <Nome entità: 7ff5ff9fa410>)) 

私は唯一の拳1を得ることができ、その命令でDXFコード350 持つすべてのエンティティを取得したいです。

(assoc 350 list) 

すべての関連付けを取得するにはどうすればよいですか?あなたはすべてのことでループする必要があるので、

おかげで、デニス

答えて

0

連想は後に限り、何も(assoc returns nil)見つからないように、1つを見つけ、最初のものだけを返します。あなたは、このようなコードを試してみてください:

(defun DXF:Dump (EntDef code/out) 
    (while (setq values(assoc code EntDef)) 
     (setq out (append out (list (cdr values)))) 
     (setq EntDef(cdr(member values EntDef))) 
    ) 
    out 
) 

; (setq dxfs (entget (car (entsel)))) 

; (DXF:Dump dxfs 350) 
0

これを達成するための様々な方法があります - ここではいくつかの例は以下のとおりです。ここで

(defun mAssoc1 (key lst/rtn) 
    (foreach x lst 
     (if (= key (car x)) 
      (setq rtn (cons (cdr x) rtn)) 
     ) 
    ) 
    (reverse rtn) 
) 

(defun mAssoc2 (key lst) 
    (apply 'append 
     (mapcar 
      (function 
       (lambda (x) (if (= key (car x)) (list (cdr x)))) 
      ) 
      lst 
     ) 
    ) 
) 


(defun mAssoc3 (key lst) 
    (mapcar 'cdr 
     (vl-remove-if-not 
      (function (lambda (x) (= key (car x)))) 
      lst 
     ) 
    ) 
) 


(defun mAssoc4 (key lst/item) 
    (if (setq item (assoc key lst)) 
     (cons (cdr item) (mAssoc4 key (cdr (member item lst)))) 
    ) 
) 


(defun mAssoc5 (key lst/item rtn) 
    (while (setq item (assoc key lst)) 
     (setq rtn (cons (cdr item) rtn) lst (cdr (member item lst))) 
    ) 
    (reverse rtn) 
) 


(defun mAssoc6 (key lst) 
    (mapcar 'cdr (acet-list-m-assoc key lst)) 
) 


(defun mAssoc7 (key lst) 
    (if lst 
     (if (= key (caar lst)) 
      (cons (cdar lst) (mAssoc7 key (cdr lst))) 
      (mAssoc7 key (cdr lst)) 
     ) 
    ) 
) 

は、上記の機能のための迅速な性能比較です:

;;; Benchmarking: Elapsed milliseconds/relative speed for 32768 iteration(s): 
;;; 
;;; (MASSOC4 2 L).....1482/1.25 <fastest> 
;;; (MASSOC5 2 L).....1482/1.25 
;;; (MASSOC6 2 L).....1498/1.24 
;;; (MASSOC3 2 L).....1638/1.13 
;;; (MASSOC7 2 L).....1747/1.06 
;;; (MASSOC1 2 L).....1748/1.06 
;;; (MASSOC2 2 L).....1856/1 <slowest> 
関連する問題