表排序
各位大神们,帮忙看看这个怎么处理((<图元名: 7fffeec0b70> "A-1-1") (<图元名: 7fffeec0b80> "A-1-2") (<图元名: 7fffeec0b90> "A-2-1") (<图元名: 7fffeec0ba0> "A-2-2") (<图元名: 7fffeec0bb0> "A-2-3") (<图元名: 7fffe8806e0> "A-1-3"))
表排序,表如上,处理方式("A-1-1")根据中间的数从大到小排序的同时根据最后的数从小到大排序。
换句话说就是:整个列表根据中间数从大到小排序,如果中间数相同的局部则根据最后一个数从小到大排序
(setq lst '(("m" "A-2-1")("m" "A-1-1")("m" "A-2-2")("m" "A-1-2")("m" "A-1-3")("m" "A-2-3")))
(vl-sort
lst
'(lambda (x y)
(or (> (atoi (cadr (string:to-list (cadr x)"-")))
(atoi (cadr (string:to-list (cadr y)"-"))))
(and (= (atoi (cadr (string:to-list (cadr x)"-")))
(atoi (cadr (string:to-list (cadr y)"-"))))
(< (atoi (caddr (string:to-list (cadr x)"-")))
(atoi (caddr (string:to-list (cadr y)"-"))))))))
函数 string:to-list 源码在 http://atlisp.cn/function/string:to-list
本帖最后由 xyp1964 于 2022-3-18 00:34 编辑
(setq lst'(("a" "A-1-1")("b" "A-1-2")("c" "A-2-1")("d" "A-2-2")("e" "A-2-3")("f" "A-1-3")))
(vl-sort lst'(lambda(x y)(setq a(xyp-StrSpr(cadr x)"-")b(xyp-StrSpr(cadr y)"-"))
(cond ((and(=(distof(cadr a))(distof(cadr b)))(<(distof(caddr a))(distof(caddr b))))t)
((>(distof(cadr a))(distof(cadr b)))t)
)
)
)
→
(("c" "A-2-1") ("d" "A-2-2") ("e" "A-2-3") ("a" "A-1-1") ("b" "A-1-2") ("f" "A-1-3"))
页:
[1]