有没有这样的一个分类统计函数?
假设表 lst 有很多相同的座标点,怎样才可以将表中相同的座标点分类统计出来?(setq lst (list '(0 0 1) '(0 1 0) '(0 1 1) '(10 1 1) '(0 1 0) '(10 1 1) )
(equal '(0 0 1)'(0 0 1)) 本帖最后由 sunnylhj 于 2014-7-23 14:06 编辑
longcashman 发表于 2014-7-23 09:42 static/image/common/back.gif
(equal '(0 0 1)'(0 0 1))
我的意思是将相同的统计出来,像:'(0 1 0)=2个,'(10 1 1)=2个 (setq lst '((0 0 1) (0 1 0) (0 1 1) (10 1 1) (0 1 0) (10 1 1)))
(xyp-List-CountSub (xyp-Sort-PtnByXYZ lst))
→
‘(((0 0 1) 1) ((0 1 0) 2) ((0 1 1) 1) ((10 1 1) 2))
(defun delsame (l1 / l2)
;;表中去除重复元素(重复过的取第一次出现)by llsheng_73
(while (setq l2 (cons (car l1) l2)
l1 (vl-remove (car l1) (cdr l1))
)
)
(reverse l2)
)
(defun count (alst / i rlst)
(setq blst alst)
(foreach a alst
(setq i 0)
(foreach b blst
(if (equal a b)
(setq i (1+ i))
)
)
(setq rlst (append (list (cons a (list i))) rlst))
)
(delsame rlst)
)
;(setq alst '((0 0 1) (0 1 0) (0 1 1) (10 1 1) (0 1 0) (10 1 1)))
;(count alst)
;-->(((10 1 1) 2) ((0 1 0) 2) ((0 1 1) 1) ((0 0 1) 1))
如果数据大,我觉得院长的应该比较快 这个应该简单啊。楼主应尝试自己写!
我写了个 好像可以!(defun t11 (lst)
(while lst
(setq a(car lst)b(length lst)lst(vl-remove a lst))
(setq l (cons (list a (- b (length lst))) l))
)
) wowan1314 发表于 2014-7-24 13:34 static/image/common/back.gif
这个应该简单啊。楼主应尝试自己写!
我写了个 好像可以!
(setq l (cons (list a (- b (length lst))) l))求解释! 我明白了
消重之后少掉的就是重复的
果然思路最重要啊 个人觉得点值应该用equal +fuzz edata 发表于 2014-7-24 16:55 static/image/common/back.gif
个人觉得点值应该用equal +fuzz
严谨
页:
[1]
2