排序问题,还有没有更简单的办法?
;;以下子程序按既定专业排序(defun zypx (lst / i Lstok Newlst tmp tmp1 lst1)
(setqLstok '("*总*" "*规*" "*建*" "*结*" "*水*"
"*暖*" "*电*" "*饰*" )
)
(setq Lst '("建筑" "电气" "给排水" "规划" "暖通" "总图" "装饰" "结构")
(setq Newlst '())
(foreach tmp LstOK
(foreach tmp1 Lst1
(if (wcmatch tmp1 tmp)
(setq Newlst (cons tmp1 Newlst))
)
)
)
(setq Newlst (reverse Newlst))
Newlst
)这是一个排序问题,就是要把Lst 表中的元素按照LstOK 中的顺序排列。嵌套循环固然没有问题,还有没有其他更简单或者效率更高的办法呢?
建议你再把vl-sort 的用法再看50遍
(defun _nthlst (str strlst / i s)
(setq i 0)
(vl-some '(lambda (x)
(setq i (1+ i))
(if (wcmatch str x)
(setq s i)
)
)
strlst
)
s
)
(defun sortlst2lstok (lst lstok)
(vl-sort lst
(function
(lambda (x y) (< (_nthlst x lstok) (_nthlst y lstok)))
)
)
)
无需排序
(setq Lstok '("*总*" "*规*" "*建*" "*结*" "*水*" "*暖*" "*电*" "*饰*"))
(setq Lst '("建筑" "电气" "给排水" "规划" "暖通" "总图" "装饰" "结构"))
(apply 'append
(mapcar
(function
(lambda (x)
(vl-remove-if-not (function (lambda (y) (wcmatch y x))) lst)
)
)
Lstok
)
)
(mapcar '(lambda (y) (car (vl-remove-if-not '(lambda (x) (wcmatch x y)) Lst))) Lstok) 自贡黄明儒 发表于 2022-4-6 16:43
(mapcar '(lambda (y) (car (vl-remove-if-not '(lambda (x) (wcmatch x y)) Lst))) Lstok)
您的代码,如未一一对应是不行的
页:
[1]