删除表中重复数据,保留图元名,并统计表中相同数量
删除表中重复数据,保留图元名,并统计表中相同数量((("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>))
写一个函数进行归并 帮忙写个代码! 没有人解决下吗? 啵浪鼓 发表于 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>)) 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>))
啥也不说了,膜拜! 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> )
)
啵浪鼓 发表于 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]