求助,一个排序的问题
本帖最后由 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函数该怎么使用?钻进了死胡同,不知道该怎么解决这个问题了。
本帖最后由 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)))))
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”)。 按题目:(vl-sort lst '(lambda (x y)(< (car x) (car y)))) 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,会出错。一直没找到出错的原因。 wharan 发表于 2022-4-4 13:13
用函数vl-sort 排序,“说明1”会和“说明10”拍到前面,用acad_strlsort函数则可以直接得到想要的结果。 ...
acad_strlsort 看说明,有操作方法,不能乱来 (vl-sort lst
'(lambda (x y) (< (ascii (car x)) (ascii (car y))))
)
页:
[1]