明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2076|回复: 4

一个不改变表中各原子位置的排序

[复制链接]
发表于 2012-11-14 21:16 | 显示全部楼层 |阅读模式
近期在做一些练习的时候突然需要将一个列表排序,但是不能改变表中各原子的位置,写了下面一段代码,个人觉得太烦琐,希望各位大大能帮忙看下,或者有更简单的思路提供参考。

  1. ;;;计算一个整数序列表,获得一个列表,每项原子均代表的该原子在原列表中的排名
  2. ;;;例如:         (Caldelta '(2 4 3 6 8 9 5 20 56))
  3. ;;;得到结果:                (1 3 2 5 6 7 4  8  9)
  4. ;;;实际使用: 可以在一系列带序号的标注文字中删除某些标注文字,重新按照原来的大小
  5. ;;;          顺序排列这些序号,如'(1 3 5 7 9 2 4 6 8)这个列表中删除了(1 5 7)
  6. ;;;          得到新的序列         (3 9 2 4 6 8)
  7. ;;;          这时可以对这个序列重新排序
  8. ;;;          得到                 (2 6 1 3 4 5)
  9. (defun CalDelta (numberlist /     indexlist sortlist
  10.       sortdelta len     count countlist
  11.       deltalist
  12.      )
  13.   (setq indexlist (vl-sort-i numberlist '<);_按从小到大的顺序求索引表
  14. sortlist  (vl-sort numberlist '<);_按从小到大的顺序排序
  15. len   (length numberlist);_表长度
  16. count   0
  17.   )
  18.   (repeat len
  19.     (setq count (1+ count))
  20.     (setq countlist (cons count countlist))
  21.   );_构造列表(len...5 4 3 2 1)
  22.   (setq countlist (reverse countlist));_倒序
  23.   (setq sortdelta (mapcar '- sortlist countlist));_得到从小到大的顺序排序差值
  24.   (setq deltalist (mapcar 'cons indexlist sortdelta));_构造索引表各元素和差值表的点对表
  25.   (setq deltalist
  26.   (vl-sort deltalist
  27.     (function (lambda (e1 e2) (< (car e1) (car e2))));_点对表按照索引表顺序排列
  28.   )
  29.   )
  30.   (setq deltalist (mapcar 'cdr deltalist));_得到差值表
  31.   (mapcar '- numberlist deltalist)
  32. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-11-14 21:38 | 显示全部楼层
(setq l '(2 4 3 6 8 9 5 20 56))
(mapcar '(lambda (X) (1+ (VL-POSITION x (vl-sort l '(lambda (a b) (< a b)))))) l)

评分

参与人数 1金钱 +5 收起 理由
yanshengjiang + 5

查看全部评分

回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2012-11-14 21:40 | 显示全部楼层
好强!拜一个
发表于 2018-12-17 22:39 | 显示全部楼层
楼主你好,我看了这个帖子好几遍,没看懂你说的啥意思,能解释一下吗?谢谢
发表于 2018-12-17 22:42 | 显示全部楼层
看懂了,我晕,这个有啥作用呀,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 08:35 , Processed in 0.352378 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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