明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 268|回复: 2

[提问] 条件排序问题

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
坛内大侠有过这个条件排序。现在有个问题:原始表original-list中如果有元素("装修")和条件patterns 不匹配(条件中没有"装修"),则把不匹配的元素放置到排序后的表最后。以下程序应该怎样修改?




(defun c:ttt ()
  (setq        original-list
         '("PS_2_PW"        "DIE_1_PW"   "PS_PW"          "PH_PW"
           "DIE_PW"        "电气"             "PH_1_PW"          "DIE_2_PW"
           "PS_1_PW"        "其他"  "装修"
          )
  )
  (setq patterns '("DI" "PS" "PH" "其" "电" "水"));排序条件
  (TJPX original-list patterns)
  )
  
;;按条件排序表中元素,元素可能是字符串,也可能是子表
  (defun TJPX(original-list patterns / )
  ;; 使用 mapcar 和 apply 函数处理列表
  (apply 'append
         (mapcar
           '(lambda (pattern / filtered-list)
              ;; 过滤原始列表中匹配当前模式的元素
              (if (setq        filtered-list
                         (vl-remove-if-not
                           '(lambda (item)
                              (wcmatch item (strcat pattern "*"))
                            )
                           original-list
                         )
                  )
                ;; 对过滤后的列表进行排序
                (vl-sort filtered-list
                         '(lambda (item1 item2 / position)
                            (setq position (+ (strlen pattern) 2))
                            (< (atoi (substr item1 position 1))
                               (atoi (substr item2 position 1))
                            )
                          )
                )
              )
            )
           patterns
         )
  )
)



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 前天 08:57 | 显示全部楼层
最好先分组,将不包含的单独弄成一个表,再排序剩下的形成另外一个表,最后两个表合并。一次排序就直接排出来的话,估计需要的条件逻辑写起来太复杂的。
回复 支持 反对

使用道具 举报

发表于 前天 14:42 | 显示全部楼层
这个不难吧,分析字符串就好了,含A一堆,含B的一堆,含C的一堆...什么都不含的一堆NO,最后组合ABC NO,就行啦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-21 01:33 , Processed in 0.154269 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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