找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1701|回复: 8

[求助] [求助]:如何实现由字符、数字组成的字符串表的排序。

[复制链接]
发表于 2006-8-1 09:51:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
("KL2a(2)" "KL8" "KL2(3)" "KL21a" "KL21(2)" "KL1(1)" "KL11(1)")经过排序处理后,变成
("KL1(1)" "KL2(3)" "KL2a(2)" "KL8" "KL11(1)" "KL21(2)" "KL21a")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-1 12:18:12 | 显示全部楼层
(acad_strlsort list)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-1 12:52:52 | 显示全部楼层
问个体外话
为什么会有几个(只有几个)函数的名字是以acad开头的,有什么典故吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-1 17:12:09 | 显示全部楼层
(acad_strlsort '("KL2a(2)" "KL8" "KL2(3)" "KL21a" "KL21(2)" "KL1(1)" "KL11(1)"))
返回
("KL1(1)" "KL11(1)" "KL2(3)" "KL21(2)" "KL21a" "KL2a(2)" "KL8")

"KL11(1)在KL2(3)的前面,不符合要求。

数字是KL的编号,要求序号大的排在后面,请教各位高人如何实现?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-2 08:41:46 | 显示全部楼层
各种语言排序函数的排序标准是基于你自己的系统设置的(在控制面板区域和语言选项里)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-2 09:29:01 | 显示全部楼层

  1. (setq lis    '("KL1(1)"        "KL2(3)" "KL2a(2)" "KL8" "KL11(1)" "KL21(2)"
  2.                "KL21a")
  3.       lis    (mapcar '(lambda (x) (vl-string-subst "z" "(" x)) lis)
  4.       lis    (acad_strlsort lis)
  5.       sorlis (vl-sort-i
  6.                lis
  7.                (function (lambda (e1 e2)
  8.                            (< (atof (substr e1 3)) (atof (substr e2 3)))
  9.                          )
  10.                )
  11.              )
  12.       newlis '()
  13. )
  14. (foreach tem sorlis
  15.   (setq newlis (cons (nth tem lis) newlis))
  16. )
  17. (setq newlis (mapcar '(lambda (x) (vl-string-subst "(" "z" x)) newlis))
  18. (princ (reverse newlis))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-2 14:14:03 | 显示全部楼层
谢谢,阿虫。
排序后,再排序。有以下问题:
1)为何一定要将“(”改为“Z“?
2)如果KL的编号是3位数且带有a、b等脚标又如何处理?嵌套排序?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-2 14:37:34 | 显示全部楼层
问题一:括号换z 是为了控制 KL2(3)  KL2a(2)等的顺序。
注:这么做不合适,有b就乱了,不改括号,reverse一下就可以了.
问题二:先把没角标的换成KL0,这样和KLa KLb等位数相同就可以了,把“(< (atof (substr e1 3)) (atof (substr e2 3)))”里的3改成4
如果是KL LL CL等,就麻烦点了,提取前2~3为,再形成顺序表,再排。
如果数量多就要注意了,速度会很慢,要改造这部分:
(foreach tem sorlis
  (setq newlis (cons (nth tem lis) newlis))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2006-8-2 14:43:52 | 显示全部楼层
http://www.xdcad.net/forum/showthread.php?threadid=572267
这里也许有你想要的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 12:35 , Processed in 0.191320 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表