jaminth 发表于 2013-8-10 06:55:04

利用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层" "屋面层")

ZZXXQQ 发表于 2013-8-10 07:56:04

如果没有中文,对字串比较结果也是相同的。
建议将数字与中文分开,数字串转换成数字再排序。

jaminth 发表于 2013-8-10 08:02:34

这个思路我想过,不过对于   “4-15”这样的数字,排序也 不对

Gu_xl 发表于 2013-8-10 09:14:04

(Vl-sort l '(lambda(a b)(< (atoi a) (atoi b))))

jaminth 发表于 2013-8-10 14:01:16

Gu_xl斑主,看不懂你写的,条件只有一列表啊

xyp1964 发表于 2013-8-10 15:55:55

_$ (aaa '("1层" "2层""16层" "3层" "屋面层""4-15奇数层" "4-15偶数层" "17层"))
("屋面层" "1层" "2层" "3层" "4-15奇数层" "4-15偶数层" "16层" "17层")

jaminth 发表于 2013-8-10 16:46:25

楼上两位版主,不要跟我玩捉迷藏了,只给出结果!不懂!!

wowan1314 发表于 2013-8-10 22:10:35

楼主吧 vl-sort函数 看明白就知道G版说的了。。

6楼的就不要研究了。 我也看不懂。。

ZZXXQQ 发表于 2013-8-11 09:31:23

6楼给出的是按G版代码的排序结果。与楼主的要求有出入。

dwg001 发表于 2013-8-11 09:40:31

本帖最后由 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
查看完整版本: 利用vl-sort 对中文进行排序,未能出现设想结果,请各位大侠帮忙,谢谢!