明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 574|回复: 4

[提问] 一个点表如何按照特定的规则来排序?求大师指点!

[复制链接]
发表于 2019-11-19 14:43 | 显示全部楼层 |阅读模式
本帖最后由 骑着蜗牛旅行666 于 2019-11-19 14:50 编辑

我有一个点表(setq lst (vl-sort lst
(function (lambda (e1 e2)
(< (cadr e1) (cadr e2)))))) 上述代码中是一个常用由小到大排列的代码,其中 lst 是一个点表,cadr数据 中含有DY-01,DY-02…,…JD-01,JD-02……LM-01,LM-02……ML-01,ML-02,ML-03……等,PM-01,PM-02……等,SM-01,SM-02……等,,按指定首位字母的顺序M,S,P,L,D,J,然后其他字母,排序,请问该如何修改成按指定字母顺序排列:排列顺序改成(ML-01,ML-02,ML-03……SM-01,SM-02……PM-01,PM-02……,LM-01,LM-02……DY-01,DY-02……JD-01,JD-02……)求大师指点,万分谢谢!!!!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-11-20 16:32 | 显示全部楼层
骑着蜗牛旅行666 发表于 2019-11-20 15:30
感谢大神,排序就是这个意思,如果这个表是个点集,又改如何来表示了?(setq lst '((“说明1” "JD-02"  ...

_$ (setq lst '(("说明1" "JD-02" )("说明2" "JD-01" )("说明3" "DY-02" )("说明4" "DY-01" )("说明5" "LM-02" )("说明6" "LM-01")("说明7"  "PM-02")("说明8"  "PM-01")("说明9" "SM-02")("说明10"  "SM-01" )("说明11" "ML-03")("说明12" "ML-02")("说明13"  "ML-01")))  
(setq plst (vl-sort (vl-sort (mapcar 'cadr lst) '<)
                   '(lambda (e1 e2)
                            (if (= (substr e1 1 1) (substr e2 1 1))
                                (< (substr e1 2 4) (substr e2 2 4))
                                                (<
                                                                (vl-string-position (ascii (substr e1 1 1)) "MSPLDJ")
                                                                (vl-string-position (ascii (substr e2 1 1)) "MSPLDJ")
                                                            )
                                                )
                                        )
                    )
)
(setq vlst (mapcar '(lambda (x) (nth x lst)) (mapcar '(lambda (y) (/ (vl-position  y (apply 'append lst)) 2)) plst)))
(("说明1" "JD-02") ("说明2" "JD-01") ("说明3" "DY-02") ("说明4" "DY-01") ("说明5" "LM-02") ("说明6" "LM-01") ("说明7" "PM-02") ("说明8" "PM-01") ("说明9" "SM-02") ("说明10" "SM-01") ("说明11" "ML-03") ("说明12" "ML-02") ("说明13" "ML-01"))
("ML-01" "ML-02" "ML-03" "SM-01" "SM-02" "PM-01" "PM-02" "LM-01" "LM-02" "DY-01" "DY-02" "JD-01" "JD-02")
(("说明13" "ML-01") ("说明12" "ML-02") ("说明11" "ML-03") ("说明10" "SM-01") ("说明9" "SM-02") ("说明8" "PM-01") ("说明7" "PM-02") ("说明6" "LM-01") ("说明5" "LM-02") ("说明4" "DY-01") ("说明3" "DY-02") ("说明2" "JD-01") ("说明1" "JD-02"))
_$

评分

参与人数 1明经币 +1 收起 理由
骑着蜗牛旅行666 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-20 09:24 | 显示全部楼层
_$ (vl-string-position (ascii "M") "MSPLDJ")
0
_$ (vl-string-position (ascii "S") "MSPLDJ")
1
_$ (vl-string-position (ascii "P") "MSPLDJ")
2
_$ (vl-string-position (ascii "L") "MSPLDJ")
3
_$ (vl-string-position (ascii "D") "MSPLDJ")
4
_$ (vl-string-position (ascii "J") "MSPLDJ")
5
_$
发表于 2019-11-20 10:09 | 显示全部楼层
_$ (setq lst '("JD-02" "JD-01" "DY-02" "DY-01" "LM-02" "LM-01" "PM-02" "PM-01" "SM-02" "SM-01" "ML-03" "ML-02" "ML-01"))
(setq lst (vl-sort (vl-sort lst '<)
                   '(lambda (e1 e2)
                            (if (= (substr e1 1 1) (substr e2 1 1))
                                (< (substr e1 2 4) (substr e2 2 4))
                                                (<
                                                                (vl-string-position (ascii (substr e1 1 1)) "MSPLDJ")
                                                                (vl-string-position (ascii (substr e2 1 1)) "MSPLDJ")
                                                            )
                                                )
                                        )
                    )
)
("JD-02" "JD-01" "DY-02" "DY-01" "LM-02" "LM-01" "PM-02" "PM-01" "SM-02" "SM-01" "ML-03" "ML-02" "ML-01")
("ML-01" "ML-02" "ML-03" "SM-01" "SM-02" "PM-01" "PM-02" "LM-01" "LM-02" "DY-01" "DY-02" "JD-01" "JD-02")
_$
 楼主| 发表于 2019-11-20 15:30 | 显示全部楼层
mahuan1279 发表于 2019-11-20 10:09
_$ (setq lst '("JD-02" "JD-01" "DY-02" "DY-01" "LM-02" "LM-01" "PM-02" "PM-01" "SM-02" "SM-01" "ML-0 ...

感谢大神,排序就是这个意思,如果这个表是个点集,又改如何来表示了?(setq lst '((“说明1” "JD-02" )(“说明2” "JD-01" )(“说明3” "DY-02" )(“说明4” "DY-01" )(“说明5” "LM-02" )(“说明6” "LM-01")(“说明7”  "PM-02")(“说明8”  "PM-01") (“说明9” "SM-02")(“说明10”  "SM-01" )(“说明11” "ML-03")(“说明12”  "ML-02")(“说明13”  "ML-01") ) )                   如何再修改下,排序后的表为((“说明13”  "ML-01") (“说明12”  "ML-02") (“说明11” "ML-03")(“说明10”  "SM-01" )(“说明9” "SM-02")(“说明8”  "PM-01")(“说明7”  "PM-02")(“说明6” "LM-01")(“说明5” "LM-02" ) (“说明4” "DY-01" ) (“说明3” "DY-02" )(“说明2” "JD-01" ) (“说明1” "JD-02" ))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 04:28 , Processed in 0.309547 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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