明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2179|回复: 8

[提问] 表按指定顺序排列,特殊用途.

[复制链接]
发表于 2014-8-30 21:52 | 显示全部楼层 |阅读模式
求高手帮忙啊!
  1. (defun sortl (l1 l2 / x l)
  2.   (setq l '())
  3.   (if (= (length l1)(length l2))
  4.     (while (setq x (car l2))
  5.        (setq l (cons (assoc x l1) l)
  6.              l2 (cdr l2)
  7.              )
  8.     )
  9.   )
  10.   (reverse l)
  11. )
  12. ;测试测试
  13. (sortl '(("赵" ("赵老大" "赵老二")) ("孙" ("孙老大" "孙老二")) ("李" ("李老大" "李老二")) ("钱" ("钱老大" "钱老二"))) '("赵" "钱" "孙" "李"))
  14. ;==>(("赵" ("赵老大" "赵老二")) ("钱" ("钱老大" "钱老二")) ("孙" ("孙老大" "孙老二")) ("李" ("李老大" "李老二")))
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2014-8-31 09:03 | 显示全部楼层
  1. (vl-sort '(("赵" ("赵老大" "赵老二")) ("孙" ("孙老大" "孙老二")) ("李" ("李老大" "李老二")) ("钱" ("钱老大" "钱老二")))
  2.          '(lambda (a b) (< (VL-POSITION (car a) '("赵" "钱" "孙" "李")) (VL-POSITION (car b) '("赵" "钱" "孙" "李")))))

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

发表于 2014-9-15 16:04 | 显示全部楼层
Gu_xl 发表于 2014-8-31 09:03

老大,好象不能按("赵" "钱" "孙" "李")排序
发表于 2014-9-15 16:38 | 显示全部楼层
自贡黄明儒 发表于 2014-9-15 16:04
老大,好象不能按("赵" "钱" "孙" "李")排序

结果:
(("赵" ("赵老大" "赵老二")) ("钱" ("钱老大" "钱老二")) ("孙" ("孙老大" "孙老二")) ("李" ("李老大" "李老二")))
不对么?
发表于 2014-9-15 16:46 | 显示全部楼层
Gu_xl 发表于 2014-9-15 16:38
结果:
(("赵" ("赵老大" "赵老二")) ("钱" ("钱老大" "钱老二")) ("孙" ("孙老大" "孙老二")) ("李" (" ...

刚才在05下运行确实不对,现在重启cad运行,正常了
发表于 2014-9-15 18:27 来自手机 | 显示全部楼层
自贡黄明儒 发表于 2014-9-15 16:46
刚才在05下运行确实不对,现在重启cad运行,正常了

估计你是看花眼了吧!这可不是段誉的六脉神剑,时灵时不灵!
发表于 2014-9-22 02:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-9-22 02:46 编辑

不用排序的一个办法,估计不如用位置排序来得快
  1. (mapcar'(lambda(x)(vl-remove-if-not'(lambda(y)(=(car y)x))'(("赵" ("赵老大" "赵老二")) ("孙" ("孙老大" "孙老二")) ("李" ("李老大" "李老二")) ("钱" ("钱老大" "钱老二")))))'("赵" "钱" "孙" "李"))

如果用assoc不用vl-remove-if的话,当有多个的时候只能取到先出现的那个,比如下边这样就不能返回所有结果
(mapcar'(lambda(x)(assoc x'(("赵" ("赵老大" "赵老二"))("李" ("李老三" "李老四")) ("孙" ("孙老大" "孙老二"))
          ("赵" ("赵老四" "赵老三")) ("李" ("李老大" "李老二")) ("钱" ("钱老大" "钱老二")))))'("赵" "钱" "孙" "李"))
发表于 2015-7-22 16:17 | 显示全部楼层
都是高手,我就是来看看的
发表于 2016-10-7 12:52 | 显示全部楼层

类似的问题,可以实现按字母升序或降序来对字符串表进行排列吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-21 01:12 , Processed in 0.211424 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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