明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3974|回复: 11

数字后缀的字符串,按X排序

  [复制链接]
发表于 2012-10-13 00:01 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 xjf 于 2012-10-13 00:03 编辑

    请问大师,带数字后缀的字符串.   只按X的大小排序怎么写啊?

    如(("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("D-9" (-1 . <图元名: -38b4d0>)) ("P-25" (-1 . <图元名: -3d5fb8>)))
这样的

最佳答案

发表于 2012-10-13 00:01 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-10-16 21:18 编辑
xjf 发表于 2012-10-14 23:55
大侠,我现在要只排点对中的X序,,请赐教

带数字后缀的字符串.   只按X的大小排序怎么写啊?
  1. (defun sort (l)
  2.   (vl-sort l
  3.            '(lambda (a b / a1 a2 b1 b2)
  4.               (setq a1 (substr (car a) 1 (setq n (vl-string-search "-" (car a))))
  5.                     a2 (substr (car a) (+ 2 n))
  6.                     b1 (substr (car b) 1 (setq n (vl-string-search "-" (car b))))
  7.                     b2 (substr (car b) (+ 2 n))
  8.               )
  9.               (if (= a1 b1)
  10.                 (< (atof a2) (atof b2))
  11.                 (< a1 b1)
  12.               )
  13.             )
  14.   )
  15. )
回复

使用道具 举报

发表于 2012-10-13 08:26 | 显示全部楼层
排序的问题 旧帖中一搜就有...

楼主重新立题提问应是很急
问题并不是那么艰深,但得不到想要的回应,原因何在!?

学问,学问,学着问...

且向老帖中观摩去呗,问对了如叩钟之应...

P.S. 看了,但仍处迷雾中...
回复

使用道具 举报

发表于 2012-10-13 11:05 | 显示全部楼层
X在哪儿呢?没看懂!
回复

使用道具 举报

 楼主| 发表于 2012-10-14 23:55 | 显示全部楼层
本帖最后由 xjf 于 2012-10-15 00:03 编辑

大侠,我现在要只排点对中的X序,,请赐教

带数字后缀的字符串.   只按X的大小排序怎么写啊?

    如(("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("D-9" (-1 . <图元名: -38b4d0>)) ("P-25" (-1 . <图元名: -3d5fb8>)))
这样的

   以下链接是求助的最初贴子:
    http://bbs.mjtd.com/thread-96701-1-1.html

最终效果要是这样:
      (("D-9" (-1 . <图元名: -38b4d0>)) ("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("P-25" (-1 . <图元名: -3d5fb8>)))

回复

使用道具 举报

 楼主| 发表于 2012-10-16 23:53 | 显示全部楼层
   等到G版到来,就看到了曙光
回复

使用道具 举报

 楼主| 发表于 2012-10-20 00:07 | 显示全部楼层
  斗胆问下G版,你的答案可否注解下, 已经可以用了,
   
   但是不懂里面的是怎样运算的??
回复

使用道具 举报

发表于 2012-12-23 00:01 | 显示全部楼层
Gu_xl 发表于 2012-10-13 00:01

版主,请问这类数据(("T3" 78.5602 58.2632 123.621) ("T11" 183.444 90.8095 222.345) ("K9" 116.679 98.4267
; 344.564) ("K22" 148.559 59.1865 456.233) ("T13" 118.074 73.3384 222.345) ("T8"
; 152.483 82.1334 344.567) ("K5" 92.8691 83.3004 345.312) ("K11" 172.091 67.3096
; 234.521)))如何按每个表的第一个元素排序? 希望的结果:
(("K5" 92.8691 83.3004 345.312) ("K9" 116.679 98.4267 344.564) ("K11"
172.091 67.3096 234.521) ("K22" 148.559 59.1865 456.233) ("T3" 78.5602
58.2632 123.621) ("T8" 152.483 82.1334 344.567) ("T11" 183.444 90.8095
222.345) ("T13" 118.074 73.3384 222.345))

点评

先参考 http://bbs.mjtd.com/thread-79299-1-1.html 得前段解  发表于 2012-12-23 13:10
回复

使用道具 举报

发表于 2012-12-23 17:19 | 显示全部楼层
yuanziyou 发表于 2012-12-23 00:01
版主,请问这类数据(("T3" 78.5602 58.2632 123.621) ("T11" 183.444 90.8095 222.345) ("K9" 116.679 98 ...

我都搜索过 几个函数都不能正确排序,自己也试着编过,不过能力有限
回复

使用道具 举报

发表于 2012-12-23 18:43 | 显示全部楼层
另外一个处方:
下载 Lsort.Lsp By Tony Tanzillo
Ref: http://www.theswamp.org/index.php?topic=40302.0
他处请自行搜寻...

给您编了个参考子函数

  1. (defun Rval (x) (read (substr x 2)))
  2. (defun ByAN (Lst1 Lst2)
  3.     (setq str1 (car Lst1)
  4.           str2 (car Lst2)
  5.     )
  6.     (cond
  7.        ((equal
  8.           (setq a (substr str1 1 1))
  9.           (setq b (substr str2 1 1))
  10.         )
  11.         (< (Rval str1) (Rval str2))
  12.        )
  13.        (T (< a b))
  14.     )
  15. )
Lst 指向您的示例
Command: (LSort lst 'ByAN)
(("K5" 92.8691 83.3004 345.312) ("K9" 116.679 98.4267 344.564) ("K11" 172.091
67.3096 234.521) ("K22" 148.559 59.1865 456.233) ("T3" 78.5602 58.2632 123.621)
("T8" 152.483 82.1334 344.567) ("T11" 183.444 90.8095 222.345) ("T13" 118.074
73.3384 222.345))
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:40 , Processed in 0.298065 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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