啵浪鼓 发表于 2013-8-28 23:48:19

删除表中重复数据,保留图元名,并统计表中相同数量

删除表中重复数据,保留图元名,并统计表中相同数量
((("1" "11.000") <图元名: 7ea16398>) (("1" "11.000") <图元名: 7ea16390>) (("1" "12.000") <图元名: 7ea16395>))
上面三组数据两组重复,删除其中一组并统计数量为2,并将2组的图元放与其放一块
另一组与其它不相同,统计数量为1,并将图元与其放在一块

以下是想要的结果:
(((("1" "11.000") . 2) <图元名: 7ea16398> <图元名: 7ea16390>)((("1" "12.000") . 1) <图元名: 7ea16395>))

阿霸jun 发表于 2013-8-29 09:05:12

写一个函数进行归并

啵浪鼓 发表于 2013-8-29 13:36:30

帮忙写个代码!

啵浪鼓 发表于 2013-8-30 13:44:00

没有人解决下吗?

ll_j 发表于 2013-8-30 14:40:55

啵浪鼓 发表于 2013-8-30 13:44 static/image/common/back.gif
没有人解决下吗?

(defun tt (lst / tmp)
(if lst
    (cons
      (cons (cons (caar lst)
                  (length
                  (setq tmp (vl-remove-if-not
                              '(lambda (x)
                                 (equal (car x) (caar lst))
                                 )
                              lst
                              )
                  )
                  )
            )
            (apply 'append
                   (mapcar 'cdr
                           tmp
                   )
            )
      )
      (tt (vl-remove-if
            '(lambda (x)
               (equal (car x) (caar lst))
             )
            lst
          )
      )
    )
)
)

(setq lst '((("1" "11.000") <图元名: 7ea16398>)
            (("1" "11.000") <图元名: 7ea16390>)
            (("1" "12.000") <图元名: 7ea16395>)
            (("1" "12.000") <图元名: 7ea16385>)
            (("3" "12.000") <图元名: 7ea16345>)
            (("1" "12.000") <图元名: 7ea16365>)
         )
)
_$ (tt lst)
(((("1" "11.000") . 2) <图元名: 7EA16398> <图元名: 7EA16390>) ((("1" "12.000") . 3) <图元名: 7EA16395> <图元名: 7EA16385> <图元名: 7EA16365>) ((("3" "12.000") . 1) <图元名: 7EA16345>))

啵浪鼓 发表于 2013-8-30 18:40:40

ll_j 发表于 2013-8-30 14:40 static/image/common/back.gif
(setq lst '((("1" "11.000") )
            (("1" "11.000") )
            (("1" "12.000") )


(setq lst '((("1" "11.000") <图元名:11-1>)
            (("1" "11.000") <图元名:11-2>)
            (("1" "12.000") <图元名:12-1>)
            (("1" "12.000") <图元名:12-2>)
            (("3" "12.000") <图元名:12>)
            (("1" "12.000") <图元名:12-3>)
         )
)

命令: (tt lst)
(((("1" "11.000") . 2) <图元名:11-1> <图元名:11-2>) ((("1" "12.000") . 3)
<图元名:12-1> <图元名:12-2> <图元名:12-3>) ((("3" "12.000") . 1) <图元名:12>))

啥也不说了,膜拜!

啵浪鼓 发表于 2013-9-1 03:06:33

ll_j 发表于 2013-8-30 14:40 static/image/common/back.gif
(setq lst '((("1" "11.000") )
            (("1" "11.000") )
            (("1" "12.000") )


ll_j老师再帮一下吧,上次的表合成后,相同坐标仍然要合并成组才行,将您的代码改动了许久,也改不了,老出现如下错误,看来还得请您亲自出马才行咯!
命令: (tt lst)
出现硬错误 ***
已达内部堆栈限制 (模拟)


将相同坐标一样的合并成一个表,并去除坐标
(
( (("1" "22") . 1) <图元名:7EDF45C0> (5153.5 4047.6 0.0) )
( (("2" "33") . 1) <图元名:7EDF45B8> (5153.5 4047.6 0.0) )
( (("3" "05") . 1) <图元名:7EDF45B0> (5128.3 4047.9 0.0) )
( (("5" "xx") . 1) <图元名:7EDF45A8> (5128.3 4047.9 0.0) )
)


想要的结果:
(
( (("1" "22") . 1) <图元名:7EDF45C0> (("2" "33") . 1) <图元名:7EDF45B8> )
( (("3" "05") . 1) <图元名:7EDF45B0> (("5" "xx") . 1) <图元名:7EDF45A8> )
)

ll_j 发表于 2013-9-1 08:45:10

啵浪鼓 发表于 2013-9-1 03:06 static/image/common/back.gif
ll_j老师再帮一下吧,上次的表合成后,相同坐标仍然要合并成组才行,将您的代码改动了许久,也改不了,老出现如 ...

(defun tt1 (lst)
(if lst
    (cons
      (append
      (apply 'append                  ;建议这里的append换成list
               (mapcar
               '(lambda (y)
                  (reverse (cdr (reverse y)))      ;去掉最后一个元素
                  )
               (vl-remove-if-not
                   '(lambda (x)
;                      (equal (last x) (last (car lst)))    ;对最后一个元素判别,可以不是点
                      (equal (distance (last x) (last (car lst))) 0 1e-6);最后一个元素是点
                  )
                   lst
               )
               )
      )
      (list (last (car lst)))
      )
      (tt1 (vl-remove-if
             '(lambda (x)
;                (equal (last x) (last (car lst)))
                (equal (distance (last x) (last (car lst))) 0 1e-6)
            )
             lst
         )
      )
    )
)
)

(setq lst '(((("1" "22") . 1) <图元名:7EDF45C0> (5153.5 4047.6 0.0))
            ((("2" "33") . 1) <图元名:7EDF45B8> (5153.5 4047.6 0.0))
            ((("3" "05") . 2) <图元名:7EDF45B0> <图元名:7EDF46B0> (5128.3 4047.9 0.0))
            ((("5" "xx") . 1) <图元名:7EDF45A8> (5128.3 4047.9 0.0))
         )
)
命令: (tt1 lst)
(((("1" "22") . 1) <图元名:7EDF45C0> (("2" "33") . 1) <图元名:7EDF45B8> (5153.5
4047.6 0.0)) ((("3" "05") . 2) <图元名:7EDF45B0> <图元名:7EDF46B0> (("5" "xx") . 1)
<图元名:7EDF45A8> (5128.3 4047.9 0.0)))
页: [1]
查看完整版本: 删除表中重复数据,保留图元名,并统计表中相同数量