利用vl-sort 对中文进行排序,未能出现设想结果,请各位大侠帮忙,谢谢!
(vl-sort '("1层" "2层" "16层" "3层" "屋面层" "4-15奇数层" "4-15偶数层" "17层") '<);返回值为:("16层" "17层" "1层" "2层" "3层" "4-15偶数层" "4-15奇数层" "屋面层")
;想要的值为:("1层" "2层" "3层" "4-15偶数层" "4-15奇数层" "16层" "17层" "屋面层")
如果没有中文,对字串比较结果也是相同的。
建议将数字与中文分开,数字串转换成数字再排序。 这个思路我想过,不过对于 “4-15”这样的数字,排序也 不对 (Vl-sort l '(lambda(a b)(< (atoi a) (atoi b)))) Gu_xl斑主,看不懂你写的,条件只有一列表啊 _$ (aaa '("1层" "2层""16层" "3层" "屋面层""4-15奇数层" "4-15偶数层" "17层"))
("屋面层" "1层" "2层" "3层" "4-15奇数层" "4-15偶数层" "16层" "17层") 楼上两位版主,不要跟我玩捉迷藏了,只给出结果!不懂!! 楼主吧 vl-sort函数 看明白就知道G版说的了。。
6楼的就不要研究了。 我也看不懂。。 6楼给出的是按G版代码的排序结果。与楼主的要求有出入。 本帖最后由 dwg001 于 2013-8-11 09:50 编辑
;;建筑层数排序,早期也玩过的。dwg001
(defun c:tt (/ al bl i j l m n)
(setq l '("-2层" "1层"
"2层" "16层"
"3层" "-6层"
"4-15奇数层"
"屋面层" "4-15偶数层"
"17层" "-3层"
"-1层" "99层"
)
)
(princ "\n原始list=")(print l)
(setq m (Vl-sort l '(lambda (a b) (< (atoi a) (atoi b)))))
(princ "\n一般性排序后list=") (print m)
(if (setq n (vl-position "屋面层" m))
(progn
(setq al '() bl '() i-1 jn )
(repeat n
(setq al (cons (nth (setq i (1+ i)) m) al))
)
(repeat (- (length m) n 1)
(setq bl (cons (nth (setq j (1+ j)) m) bl))
)
(setq m (append (reverse al) (reverse bl) (list "屋面层")))
)
m
)
(princ "\n有屋面层排序后list=")(print m)
(princ)
)
命令: tt
原始list=
("-2层" "1层" "2层" "16层" "3层" "-6层" "4-15奇数层" "屋面层" "4-15偶数层" "17层" "-3层" "-1层" "99层")
一般排序后list=
("-6层" "-3层" "-2层" "-1层" "屋面层" "1层" "2层" "3层" "4-15奇数层" "4-15偶数层" "16层" "17层" "99层")
有屋面层排序后list=
("-6层" "-3层" "-2层" "-1层" "1层" "2层" "3层" "4-15奇数层" "4-15偶数层" "16层""17层" "99层" "屋面层")
页:
[1]
2