明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 568|回复: 4

[提问] 用foreach已实现的功能,如何用vl-remove-if 、vl-some等方式实现?

[复制链接]
发表于 2024-8-15 19:59:35 | 显示全部楼层 |阅读模式
本帖最后由 wharan 于 2024-8-18 18:39 编辑

这段程式,New_List、 Atts 、KeyWordTmp均为表,New_List、 Atts表元素为二维子表,KeyWordTmp元素为模糊查询的关键词。将New_List、 Atts的元素与KeyWordTmp中的关键词模糊匹配。如果New_List、 Atts均在KeyWordTmp中匹配到相同的关键词,则用New_List、 Atts认为匹配并用它们的相关值组成新表。该功能在下面程式已完成匹配,但效率较低。

;;属性标志模糊转换函数,返回转换后的表
(defun Tag2tag (New_List Atts KeyWordTmp / _Tmp _Tmpy _Tmpz)
  (setq _Tmp nil)
  (foreach y New_List
    (setq _Tmpy (findkey (car y) KeyWordTmp))
    (foreach z Atts
      (setq _Tmpz (findkey (car z) KeyWordTmp))
      (if (= _Tmpy _Tmpz)
        (setq _Tmp (cons (cons (car z) (cdr y)) _Tmp))
      )
    )
  )
  _Tmp
)
这个问题,有了一些进步,也确实看到了效率的提升。附件是进行了一些改进的测试程序,上次漏发了一个函数。





tryhi黄翔等大侠启发,感觉vl-remove-if 、vl-some等方式实现该功能效率应该会更高。无奈没仔细研究过这几个表函数,屡试无果,特来求教。



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-15 21:01:57 | 显示全部楼层
感觉是个好案例,有测试数据吗?
 楼主| 发表于 2024-8-15 21:27:38 | 显示全部楼层
jenlin 发表于 2024-8-15 21:01
感觉是个好案例,有测试数据吗?

今天论坛不正常,附件上传很困难。另外一个帖子有测试程序。
 楼主| 发表于 2024-8-18 18:40:18 | 显示全部楼层
jenlin 发表于 2024-8-15 21:01
感觉是个好案例,有测试数据吗?

已上传测试程序
发表于 2024-8-19 14:48:08 | 显示全部楼层
(defun findkey(k lst)
        (car
                (vl-remove-if-not
                        '(lambda(x)
                                 (wcmatch(strcase k)(strcase(strcat(car x)","(cadr x))))
                         )
                        lst
                )
        )
)
(defun Tag2tag(New_List Atts KeyWordTmp)
        (mapcar
                '(lambda(a b)
                         (if(eq(findkey(car a)KeyWordTmp)(findkey b KeyWordTmp))
                                 (cons b(cdr a))
                         )
                 )
                New_List
                (mapcar 'car Atts)
        )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:39 , Processed in 0.251736 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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