[已解决]从表中剔除不用了的元素
本帖最后由 wmz 于 2014-11-10 18:41 编辑表2中是某些点的编号和坐标,表1中是纯点编号,欲将其表2中编号与表1中编号相同的那些坐标从表2 中剔除,形成一新表。我写的程序太慢,请教大侠们出手相助,感激不尽!
(这些数据是部分摘录,真实的数据有几千上万个以上元素)
表1:(163 227 245)
表2:((163 38347358.67 3293309.94 3.00) (163 38347354.67 3293304.27 3.00) (192 38347411.36 3293358.33 3.00) (192 38347402.36 3293360.97 3.00) (193 38347399.99 3293365.80 3.00) (193 38347402.36 3293360.97 3.00) (195 38347361.61 3293313.90 3.00) (195 38347358.67 3293309.94 3.00) (224 38347382.49 3293340.96 3.00) (224 38347409.60 3293356.23 3.00) (225 38347411.36 3293358.33 3.00) (225 38347409.60 3293356.23 3.00) (226 38347399.99 3293365.80 3.00) (226 38347396.23 3293366.07 3.00) (227 38347330.86 3293283.73 3.00) (227 38347336.84 3293288.68 3.00) (228 38347361.61 3293313.90 3.00) (228 38347359.33 3293319.55 3.00) (245 38347399.69 3293375.27 3.00) (245 38347396.23 3293366.07 3.00))
本帖最后由 ll_j 于 2014-11-10 16:31 编辑
是这个意思吗?(vl-remove-if '(lambda(x) (member (car x) lst1)) lst2) 本帖最后由 wowan1314 于 2014-11-10 17:05 编辑
纯lisp方法!!(mapcar '(lambda(x)(or(member(car x)l1)(setq l3(cons x l3))))l2) ll_j 发表于 2014-11-10 16:30 static/image/common/back.gif
是这个意思吗?
是这个意思,成功了。十分感谢!
我这里有一个奇怪的问题,我也照这个思路写了(当然没有你这个既精简又高效),总是测试不成功。而且当用你的这个测试时还是不成功,于是我就纳闷了,但我用到实际运行中时(即总的程序中),却是对的。因为我要单独写这一段嘛,我就在程序运行中将这两个表写到文件里去。再单独写代码进行调试,其表现却总是我想剔除的元素纹丝不动。用你这个也是。这啥原因?弄不懂。 wowan1314 发表于 2014-11-10 16:49 static/image/common/back.gif
纯lisp方法!!
成功了。两位的都很好,十分感谢!
我这里有一个奇怪的问题,我也照这个思路写了(当然没有你这个既精简又高效),总是测试不成功。而且当用你的这个测试时还是不成功,于是我就纳闷了,但我用到实际运行中时(即总的程序中),却是对的。因为我要单独写这一段嘛,我就在程序运行中将这两个表写到文件里去。再单独写代码进行调试,其表现却总是我想剔除的元素纹丝不动。用你这个也是。这啥原因?弄不懂。
想知道纯lisp方法和vl-remove-if方法哪个更快?楼主可以测试一下吗? (defun LM:RemoveWithFuzz ( l1 l2 fz )
(vl-remove-if
(function
(lambda ( a )
(vl-some
(function (lambda ( b ) (equal a b fz)))
l1
)
)
)
l2
)
)
页:
[1]