qinleilei 发表于 2016-8-1 21:10:35

关于表处理,各位老师进来指点下

本帖最后由 qinleilei 于 2016-8-3 18:45 编辑

最近碰到了一个关于表处理问题,不知道怎么弄,请各位老师指点下

下面的表是由坐标 图元名 组成的一个表
( (pt1 e1) (pt2 e2) (pt3 e3) (pt4 e4) (pt5 e5) (pt6 e6)(pt7 e7) 此处还有很多省略.....)

判断表中 坐标相同的图元名 归在一起,比如 pt1 pt3 pt7 坐标相同pt2 pt5 坐标相同pt4 pt6 坐标相同 ,此处还有很多省略...
处理完后达到下面的效果
((pt1e1 e3 e7 ) (pt2 e2 e5) (pt4 e4 e6)此处还有很多省略.....)
函数怎么写,才能快速处理成这样的效果?

问题解决了,
真的很感谢大家的帮忙,谢谢了!

llsheng_73 发表于 2016-8-1 21:10:36

本帖最后由 llsheng_73 于 2016-8-2 19:36 编辑

(setq a nil
         lst(list(list pt1 e1)(list pt2 e2)(list pt3 e3)(list pt4 e4)(list pt5 e5)(list pt6 e6)(list pt7 e7)))
;;考虑坐标精度问题,取小数后三位
(mapcar'(lambda(x)(cons(mapcar'atof(car x))(cdr x)))
       (foreach x lst
(setq x(cons(mapcar'(lambda(x)(rtos x 2 3))(car x))(cdr x))
      a(if(setq c(car x)b(assoc c a))
    (subst(append b(cdr x))b a)
    (append a(list x))))))
;;不考虑坐标精度就简单多了
(foreach x lst
(setq a(if(setq c(car x)b(assoc c a))
    (subst(append b(cdr x))b a)
    (append a(list x)))))

cable2004 发表于 2016-8-1 22:33:21

写个循环while

Sylvanas 发表于 2016-8-2 08:54:08

试试这个

(defun c:tt ()
(setq        lst0 '(((1.0 1.0) a)
             ((1.0 1.0) b)
             ((1.0 2.0) c)
             ((2.0 2.0) d)
             ((2.0 2.0) e)
             ((2.0 3.0) e)
              )
)                                        ;测试样表
(defun delsame (l)
    (if        l
      (cons (car l) (delsame (vl-remove (car l) l)))
    )
)
(setq lst (delsame (mapcar 'car lst0)))
(setq lst (mapcar 'list lst))
(foreach x lst0
    (setq x1 (assoc (car x) lst))
    (setq lst (subst (append x1 (cdr x)) x1 lst))
)
)

且听风吟09 发表于 2016-8-2 14:29:03

可以参考:游程编码

guankuiwu 发表于 2022-10-6 10:55:18

坐标精度。。学习

正能量的一诺 发表于 2023-2-25 22:35:14

Sylvanas 发表于 2016-8-2 08:54
试试这个

(defun c:tt ()


递归,数量多了以后速度巨慢,怎么解决?
页: [1]
查看完整版本: 关于表处理,各位老师进来指点下