明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2032|回复: 7

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

[复制链接]
发表于 2013-8-28 23:48 | 显示全部楼层 |阅读模式
删除表中重复数据,保留图元名,并统计表中相同数量
((("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>))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-8-29 09:05 | 显示全部楼层
写一个函数进行归并
 楼主| 发表于 2013-8-29 13:36 来自手机 | 显示全部楼层
帮忙写个代码!
 楼主| 发表于 2013-8-30 13:44 来自手机 | 显示全部楼层
没有人解决下吗?
发表于 2013-8-30 14:40 | 显示全部楼层
啵浪鼓 发表于 2013-8-30 13:44
没有人解决下吗?

  1. (defun tt (lst / tmp)
  2.   (if lst
  3.     (cons
  4.       (cons (cons (caar lst)
  5.                   (length
  6.                     (setq tmp (vl-remove-if-not
  7.                                 '(lambda (x)
  8.                                    (equal (car x) (caar lst))
  9.                                  )
  10.                                 lst
  11.                               )
  12.                     )
  13.                   )
  14.             )
  15.             (apply 'append
  16.                    (mapcar 'cdr
  17.                            tmp
  18.                    )
  19.             )
  20.       )
  21.       (tt (vl-remove-if
  22.             '(lambda (x)
  23.                (equal (car x) (caar lst))
  24.              )
  25.             lst
  26.           )
  27.       )
  28.     )
  29.   )
  30. )


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

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
啵浪鼓 + 1 + 50 很给力!

查看全部评分

 楼主| 发表于 2013-8-30 18:40 | 显示全部楼层
ll_j 发表于 2013-8-30 14:40
(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 | 显示全部楼层
ll_j 发表于 2013-8-30 14:40
(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> )
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-9-1 08:45 | 显示全部楼层
啵浪鼓 发表于 2013-9-1 03:06
ll_j老师再帮一下吧,上次的表合成后,相同坐标仍然要合并成组才行,将您的代码改动了许久,也改不了,老出现如 ...

  1. (defun tt1 (lst)
  2.   (if lst
  3.     (cons
  4.       (append
  5.         (apply 'append                  ;建议这里的append换成list
  6.                (mapcar
  7.                  '(lambda (y)
  8.                     (reverse (cdr (reverse y)))        ;去掉最后一个元素
  9.                   )
  10.                  (vl-remove-if-not
  11.                    '(lambda (x)
  12. ;                      (equal (last x) (last (car lst)))    ;对最后一个元素判别,可以不是点
  13.                       (equal (distance (last x) (last (car lst))) 0 1e-6)  ;最后一个元素是点
  14.                     )
  15.                    lst
  16.                  )
  17.                )
  18.         )
  19.         (list (last (car lst)))
  20.       )
  21.       (tt1 (vl-remove-if
  22.              '(lambda (x)
  23. ;                (equal (last x) (last (car lst)))
  24.                 (equal (distance (last x) (last (car lst))) 0 1e-6)
  25.               )
  26.              lst
  27.            )
  28.       )
  29.     )
  30.   )
  31. )


(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明经币 +1 金钱 +50 收起 理由
啵浪鼓 + 1 + 50 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 01:20 , Processed in 0.276635 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表