sunnylhj 发表于 2014-7-23 09:33:25

有没有这样的一个分类统计函数?

假设表 lst 有很多相同的座标点,怎样才可以将表中相同的座标点分类统计出来?
(setq lst (list '(0 0 1) '(0 1 0) '(0 1 1) '(10 1 1) '(0 1 0) '(10 1 1) )




longcashman 发表于 2014-7-23 09:42:36

(equal '(0 0 1)'(0 0 1))

sunnylhj 发表于 2014-7-23 12:10:22

本帖最后由 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个

xyp1964 发表于 2014-7-23 12:50:34

(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))

longcashman 发表于 2014-7-24 11:41:52

(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))

如果数据大,我觉得院长的应该比较快

wowan1314 发表于 2014-7-24 13:34:40

这个应该简单啊。楼主应尝试自己写!

我写了个 好像可以!(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))
    )
)

longcashman 发表于 2014-7-24 16:05:22

wowan1314 发表于 2014-7-24 13:34 static/image/common/back.gif
这个应该简单啊。楼主应尝试自己写!

我写了个 好像可以!

(setq l (cons (list a (- b (length lst))) l))求解释!

longcashman 发表于 2014-7-24 16:09:53

我明白了
消重之后少掉的就是重复的
果然思路最重要啊

edata 发表于 2014-7-24 16:55:59

个人觉得点值应该用equal +fuzz

longcashman 发表于 2014-7-24 17:03:49

edata 发表于 2014-7-24 16:55 static/image/common/back.gif
个人觉得点值应该用equal +fuzz

严谨
页: [1] 2
查看完整版本: 有没有这样的一个分类统计函数?