明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 794|回复: 7

[提问] 求助,一个排序的问题

[复制链接]
发表于 2022-4-4 01:10:41 | 显示全部楼层 |阅读模式
本帖最后由 wharan 于 2022-4-4 01:20 编辑

想把表'( ("A" 1) ("D" 4) ("F" 6) ("B" 2) ("C" 3)) 排序为'( ("A" 1) ("B" 2) ("C" 3) ("D" 4) ("F" 6)),也就是根据子表中字符串按从小到大的顺序排序,MAPCAR、Lambda、acad_strlsort函数该怎么使用?钻进了死胡同,不知道该怎么解决这个问题了。

本帖子中包含更多资源

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

x

点评

(vl-sort lst'(lambda (x y) (< (cadr x) (cadr y))))  发表于 2022-4-4 17:29
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-4-4 07:28:13 | 显示全部楼层
本帖最后由 gaics 于 2022-4-4 07:44 编辑

按第1个原子排序:(vl-sort lst (function (lambda (e1 e2)(< (car e1) (car e2)))))
"说明10"排在了"说明2"之前,如果是"说明01"、"说明02"、"说明03"......这样就没问题。

按第2个原子排序:(vl-sort lst (function (lambda (e1 e2)(< (cadr e1) (cadr e2)))))




 楼主| 发表于 2022-4-4 11:25:26 | 显示全部楼层
gaics 发表于 2022-4-4 07:28
按第1个原子排序:(vl-sort lst (function (lambda (e1 e2)(< (car e1) (car e2)))))
"说明10"排在了"说明 ...

函数acad_strlsort可以对字符串按ASSIC码排序,挺简单的。(acad_strlsort '("A1" "A3" "A2")) 直接返回‘(“A1” “A2” “A3”)。
发表于 2022-4-4 12:39:29 | 显示全部楼层
按题目:(vl-sort lst '(lambda (x y)(< (car x) (car y))))
 楼主| 发表于 2022-4-4 13:13:47 | 显示全部楼层
xyp1964 发表于 2022-4-4 12:39
按题目:(vl-sort lst '(lambda (x y)(< (car x) (car y))))

用函数vl-sort 排序,“说明1”会和“说明10”拍到前面,用acad_strlsort函数则可以直接得到想要的结果。但在上式中直接把vl-sort 带换成acad_strlsort,会出错。一直没找到出错的原因。
发表于 2022-4-4 15:24:46 | 显示全部楼层
wharan 发表于 2022-4-4 13:13
用函数vl-sort 排序,“说明1”会和“说明10”拍到前面,用acad_strlsort函数则可以直接得到想要的结果。 ...

acad_strlsort 看说明,有操作方法,不能乱来
发表于 2022-4-4 15:45:22 | 显示全部楼层
(vl-sort lst
         '(lambda (x y) (< (ascii (car x)) (ascii (car y))))
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:38 , Processed in 0.220333 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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