llyidong 发表于 2010-9-1 15:18:00

[求助]如何删除X相同的点表 并按X排序

<p>请大家帮助</p>
<p>&nbsp;</p>
<p>((18 20)&nbsp; (40 15)&nbsp; (18 50)&nbsp; (30 50)&nbsp; (40 25) &gt;&gt;&gt;&gt;&gt;&gt;((18 20) (30 50) (40 15))</p>
<p>保留的点为X相同的其中任一点即可</p>

xyp1964 发表于 2010-9-1 19:40:00

<font face="Verdana">;; 保留的点为X相同的其中任一点<br/>;; (x-sort '((18 20)&nbsp; (40 15)&nbsp; (18 50)&nbsp; (30 50)&nbsp; (40 25))) → '((18 20) (30 50) (40 15))<br/>(defun x-sort (lst / lst1 lst2 a e1 e2)<br/>&nbsp; (setq&nbsp;lst1 '()<br/>&nbsp;lst2 '()<br/>&nbsp; )<br/>&nbsp; (foreach a lst<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(not (member (car a) lst1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lst1 (cons (car a) lst1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; lst2 (cons a lst2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (vl-sort lst2 '(lambda (e1 e2) (&lt; (car e1) (car e2))))<br/>)</font>

llyidong 发表于 2010-9-1 20:22:00

<p>谢谢版主相助</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>借版主程式改了一个</p>
<p><font face="Verdana">;如何删除y相同的点表 并按y排序<br/>;; 保留的点为y相同的其中任一点<br/>;; (x-sort '((18 20)&nbsp; (40 15)&nbsp; (18 50)&nbsp; (30 50)&nbsp; (40 25))) → '((40 15) (18 20) (40 25) (18 50))<br/>;(setq lst '((18 20)&nbsp; (40 15)&nbsp; (18 50)&nbsp; (30 50)&nbsp; (40 25)))</font></p>
<p><font face="Verdana">(defun y-sort (lst / lst1 lst2 a e1 e2)<br/>&nbsp; (setq lst1 '()<br/>&nbsp;lst2 '()<br/>&nbsp; )<br/>&nbsp; (foreach a lst<br/>&nbsp;&nbsp;&nbsp; (if (not (member (cadr a) lst1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lst1 (cons (cadr a) lst1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; lst2 (cons a lst2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (vl-sort lst2 '(lambda (e1 e2) (&lt; (cadr e1) (cadr e2))))<br/>) <br/></font></p>

icefrog 发表于 2010-12-16 23:38:11

顶   不知道用的上用不上

myjping 发表于 2012-4-20 16:26:38

点如果有重合的怎么办呢

qq229918602 发表于 2012-4-20 21:17:46

强悍、、、、、

hhh454 发表于 2013-12-18 21:01:30

正好用到这个代码,试试
页: [1]
查看完整版本: [求助]如何删除X相同的点表 并按X排序